在C#中预验证Web服务请求

Rob*_*aas 7 c# web-services

我在使用C#调用Web服务请求时遇到问题.

服务和请求在Soap UI中正常工作,启用了"Authenticate Preemptively"选项(文件,首选项,HTTP设置).如果未启用此设置,则服务将返回"Java.Lang.NullPointerException".

我遇到的问题是我不知道如何在C#上下文中启用此设置.

我有一个.NET 3.5类库,它包含对特定服务的所谓服务引用.这是一个简单的代码片段;

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);
}
Run Code Online (Sandbox Code Playgroud)

第一次回复后更新.

CatalogService.CatalogChangeClient类似乎实现了WCF抽象类

System.ServiceModel.ClientBase<TChannel>
Run Code Online (Sandbox Code Playgroud)

结束更新

谁能帮我设置这个属性?

Nic*_*sen 6

您可以尝试GetWebRequest从生成的客户端存根中覆盖该方法.我曾经使用过这个,这解决了我的问题.

请查看以下URL:

http://www.eggheadcafe.com/community/wcf/18/10056093/consuming-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;
}
Run Code Online (Sandbox Code Playgroud)

  • [.NET WebRequest.PreAuthenticate – 听起来不像](http://www.west-wind.com/weblog/posts/2010/Feb/18/NET-WebRequestPreAuthenticate-not-quite-) 上有一篇很好的文章what-it-sounds-like)更详细地描述了您的答案和其他选项。 (2认同)
  • GetWebRequest方法在哪里? (2认同)
  • System.ServiceModel.ClientBase&lt;TChannel&gt; 没有 GetWebRequest,那么您在哪里进行了此覆​​盖? (2认同)