我知道这已被问过一百次,但我无法做到这一点。我有一个.Net Web服务客户端,需要连接到不返回401质询响应的外部Web服务。我必须在第一次调用时发送身份验证标头。我通过在另一个文件中创建一个分部类来重写生成的代理类的GetWebRequest方法。我还将方法添加到生成的文件中,以查看是否有所不同,但代码不会被调用。这最初是在VS 2013中创建的.Net 3.5 Web服务项目,但我尝试将目标框架更改为4.0,4.5 e.t.c.这没有任何影响。
我正在使用的代码:
[System.Web.Services.WebServiceBindingAttribute(Name = "WSLDSD03_v1_webService_ValidationTicketCreation_Binder", Namespace = "http://llvap002d/WSLDSD03.v1.webService:ValidationTicketCreation")]
public partial class WSLDSD03_v1_webService_ValidationTicketCreation_Binder : System.Web.Services.Protocols.SoapHttpClientProtocol
{
protected override WebRequest GetWebRequest(Uri uri)
{
var request = base.GetWebRequest(uri);
string WSUID = ConfigurationManager.AppSettings["WSUID"];
string WSPWD = ConfigurationManager.AppSettings["WSPWD"];
string encoded = Convert.ToBase64String(System.Text.Encoding.ASCII.GetBytes(WSUID + ":" + WSPWD));
request.Headers.Add("Authorization", "Basic " + encoded);
return request;
}
}
更新:我发现在一个干净的解决方案和重建之后,如果我将它移动到生成的类中,该方法实际上会被调用。它是单独文件中的部分类,似乎是问题所在。
答案 0 :(得分:0)
原来是一个简单的编码错误。我没注意到生成的代理文件中的命名空间就像MyProject.WebReference,但在我的单独文件中,我使用了主项目命名空间。