c#4.0-将WSSE SOAP标头添加到Web引用



我正试图将WSSE SOAP标头添加到我的服务调用中,但大多数示例都集中在WCF上。我没有利用WCF。我添加了一个Web引用(WSDL)。

我尝试过各种方法,但都没有成功,比如重写GetWebRequest方法:

    protected override System.Net.WebRequest GetWebRequest(Uri uri)
    {
        string user = "username";
        string pwd = "password";
        System.Net.WebRequest request = base.GetWebRequest(uri);
        string auth = string.Format("Basic {0}", Convert.ToBase64String(System.Text.Encoding.Default.GetBytes(string.Format("{0}:{1}", user, pwd))));
        request.PreAuthenticate = true;
        request.AuthenticationLevel = System.Net.Security.AuthenticationLevel.MutualAuthRequested;
        request.Headers.Add(HttpRequestHeader.Authorization, auth);
        return request;
    }

WSSE安全标头应该类似于以下内容:

<Security xmlns="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
         <UsernameToken>
            <Username>username</Username>
            <Password>password</Password>
         </UsernameToken>
      </Security>

非常感谢!亲切问候,

请参考以下内容:

http://underthehood.ironworks.com/2010/01/why-doesnt-my-generated-proxy-class-build-wsse-elements-into-the-soap-request-header.html

如何将安全标头添加到SOAP消息中?

它提供了答案!

尝试添加注释,但太长。。。

第二个环节还可以吗?无论如何,这里不是链接,而是我认为的关键信息(以防链接消失)-将对System.Web.Services.Protocols.SoapHttpClientProtocol的引用替换为Microsoft.Web.Services.WebServicesClientProtocol(或Microsoft.Web.Services3.WebServicesClientProtocol,如果适用的话-我通过nuget找到了Services2)。我们需要更改类,因为SoapHttpClientProtocol中的请求方法受到保护,因此很难(不可能?)调整任何请求详细信息。我认为,如果您使用WCF生成代码,那么更改类将打开提供给您的所有可能性。如果您正在添加username,那么您可能希望添加所有其他SOAP安全值,所以SOAP Web服务的正确通信方式WSSE Usernametoken是一个方便的参考。

相关内容

  • 没有找到相关文章

最新更新