我正在尝试连接到可通过https访问并需要身份验证的服务。
我得到的错误是:
测试方法 TestProject1.UnitTest1.TestReharB2B 抛出异常: System.ServiceModel.Security.MessageSecurityException: HTTP请求未经授权 客户认证方案 '匿名'。身份验证标头 从服务器收到的是'基本的 境界=“应用程序””。 ---> System.Net.WebException:远程 服务器返回错误:(401) 未经授权..
在我看来,用户名和密码不会发送到服务。我错过了什么?
代码:
EndpointAddress address = new EndpointAddress(
new Uri("https://84.52.158.151:8443/JavaStore/services/B2BService"),
EndpointIdentity.CreateDnsIdentity("JavaStore"),
new AddressHeaderCollection()
);
BasicHttpBinding binding = new BasicHttpBinding();
binding.Security.Mode = BasicHttpSecurityMode.TransportWithMessageCredential;
binding.Security.Message.ClientCredentialType = BasicHttpMessageCredentialType.UserName;
var client = new ReharB2BService.B2BServicePortTypeClient(binding, address);
client.ChannelFactory.Credentials.UserName.UserName = "dotNet";
client.ChannelFactory.Credentials.UserName.Password = "dotnetpwd";
client.Open();
client.getAllItems();
答案 0 :(得分:2)
您的服务返回错误,因为服务器和客户端之间存在一些错误配置。您的客户端使用带有UserName消息凭据的传输安全性。这意味着使用了HTTPS,消息包含带有用户名和密码的SOAP标头。但是您的服务返回异常,因为它(可能是IIS)期望使用Basic凭据的传输安全性。这意味着HTTPS和HTTP基本身份验证(HTTP标头)。