将授权标头设置为.Net Web服务客户端

时间:2017-11-17 11:04:28

标签: c# .net web-services

我知道这已被问过一百次,但我无法做到这一点。我有一个.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;
    }
}

更新:我发现在一个干净的解决方案和重建之后,如果我将它移动到生成的类中,该方法实际上会被调用。它是单独文件中的部分类,似乎是问题所在。

1 个答案:

答案 0 :(得分:0)

原来是一个简单的编码错误。我没注意到生成的代理文件中的命名空间就像MyProject.WebReference,但在我的单独文件中,我使用了主项目命名空间。