将WSSE SOAP标头添加到Web引用

时间:2013-02-14 07:15:37

标签: c#-4.0 soap web-reference

我正在尝试将WSSE SOAP Header添加到我的服务调用中,但大多数示例都集中在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>

非常感谢提前! 亲切的问候,

2 个答案:

答案 0 :(得分:5)

答案 1 :(得分:0)

尝试添加评论,但太长了...

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