簡體   English   中英

在 C# 中預認證 web 服務請求

[英]Pre authenticate web service request in C#

我在調用 C# 中的 web 服務請求時遇到問題。

服務和請求在 Soap UI 中運行良好,啟用了“預先驗證”選項(文件、首選項、HTTP 設置)。 如果不啟用此設置,服務將返回“Java.Lang.NullPointerException”。

我遇到的問題是我不知道如何在 C# 上下文中啟用此設置。

我有一個 .NET 3.5 class 庫,其中包含對特定服務的所謂服務引用。 這是一個簡單的代碼片段;

try
{
    CatalogService.CatalogChangeClient service = new CatalogService.CatalogChangeClient();
    service.ClientCredentials.UserName.UserName = "fancydress";
    service.ClientCredentials.UserName.Password = "47fda9cb4b51a9e";
    service.ClientCredentials.SupportInteractive = true;

    ProductUpdate[] products = new ProductUpdate[1];
    products[0] = new ProductUpdate();
    products[0].ProductCode = "00001";
    products[0].ProductDescription = "TestProduct";

    string result = service.UpdateProducts(products);
}
catch (Exception exception)
{
    Console.WriteLine(exception.Message);
}

第一次回復后更新。

CatalogService.CatalogChangeClient class 似乎實現了 WCF 抽象 class

System.ServiceModel.ClientBase<TChannel>

結束更新

誰能幫我設置這個屬性?

您可以嘗試從生成的客戶端存根中覆蓋GetWebRequest方法。 我用過一次,解決了我的問題。

看下面的URL:

http://www.eggheadcafe.com/community/wcf/18/10056093/sumption-webservices-and-http-basic-authentication.aspx

向下滾動一點。

這是鏈接中的代碼:

protected override System.Net.WebRequest GetWebRequest(Uri uri)
{
    HttpWebRequest request;
    request = (HttpWebRequest)base.GetWebRequest(uri);

    if (PreAuthenticate)
    {
        NetworkCredential networkCredentials =
            Credentials.GetCredential(uri, "Basic");

        if (networkCredentials != null)
        {
            byte[] credentialBuffer = new UTF8Encoding().GetBytes(
                networkCredentials.UserName + ":" +
                networkCredentials.Password);
            request.Headers["Authorization"] =
                "Basic " + Convert.ToBase64String(credentialBuffer);
        }
        else
        {
            throw new ApplicationException("No network credentials");
        }
    }
    return request;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM