繁体   English   中英

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

[英]Setting Authorization Header to .Net Web Service Client

我知道这个问题已经被问过一百遍了,但是我无法解决这个问题。 我有一个.Net Web服务客户端,该客户端需要连接到不返回401质询响应的外部Web服务。 我必须在第一个电话上发送身份验证标头。 我通过在另一个文件中创建局部类来覆盖生成的代理类的GetWebRequest方法。 我还将该方法添加到了生成的文件中,以查看是否有区别,但是代码不会被调用。 这最初是在VS 2013中创建的.Net 3.5 Web服务项目,但是我尝试将目标框架更改为4.0、4.5等,但这没有任何效果。

我正在使用的代码:

[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;
    }
}

更新:从那以后,我发现在干净的解决方案并重建之后,如果我将其移至生成的类中,该方法实际上确实会被调用。 这是问题所在的单独文件中的部分类。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM