我正试图将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是一个方便的参考。