[英]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:
向下滾動一點。
這是鏈接中的代碼:
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.