在C#中预validationWeb服务请求

我在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); } 

第一次回复后更新。

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

 System.ServiceModel.ClientBase 

结束更新

谁能帮我设置这个属性?

您可以尝试从生成的客户端存根中覆盖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; }