我正在尝试编写一个消耗SOAP 1.2 Web服务的C#客户端应用程序。此服务受HTTP基本身份验证和WS-Security身份验证保护,每个身份验证具有不同的凭据。这不是我的网络服务所以我无法改变它。
在我的.config文件中,我有:
<wsHttpBinding>
<binding name="wsHttpsBinding">
<security mode="TransportWithMessageCredential">
<message clientCredentialType="UserName" />
</security>
</binding>
</wsHttpBinding>
在我的代码中,我使用它来设置WS-Security凭证:
client.ClientCredentials.UserName.UserName = header.UniqueId;
client.ClientCredentials.UserName.Password = header.Password;
执行此操作时,WS-Security标头已成功添加到SOAP消息中,但缺少HTTP授权标头。我尝试使用以下方法手动添加:
using (OperationContextScope scope = new OperationContextScope(client.InnerChannel))
{
var httpRequestProperty = new HttpRequestMessageProperty();
httpRequestProperty.Headers[System.Net.HttpRequestHeader.Authorization] =
"Basic " +
Convert.ToBase64String(Encoding.ASCII.GetBytes(httpAuthUser + ":" +
httpAuthPassword));
OperationContext.Current.OutgoingMessageProperties[HttpRequestMessageProperty.Name] = httpRequestProperty;
但该代码似乎被忽略了。