WCF服务客户端引发SecurityNegotiationException异常
本文关键字:SecurityNegotiationException 异常 服务 客户端 WCF | 更新日期: 2023-09-27 18:05:39
我有一个WCF服务与用户名和密码安全。我写了一个简单的客户端,但是当我试图调用Web服务方法时,我收到SecurityNegotiationException异常。
Web服务的配置如下所示:
<services>
<service name="MyServ.Service1"
behaviorConfiguration="MyBehavior">
<endpoint address=""
binding="basicHttpBinding"
bindingConfiguration="MyBindingConfiguration"
contract="MyServ.IService1" />
<endpoint address="mex"
binding="mexHttpsBinding"
contract="IMetadataExchange" />
</service>
</services>
<bindings>
<basicHttpBinding>
<binding name="MyBindingConfiguration">
<security mode="TransportWithMessageCredential">
<message clientCredentialType="UserName" />
</security>
</binding>
</basicHttpBinding>
</bindings>
<behaviors>
<serviceBehaviors>
<behavior name="MyBehavior">
<serviceMetadata httpsGetEnabled="true"/>
<!-- To receive exception details in faults for debugging purposes, set the value below to true. Set to false before deployment to avoid disclosing exception information -->
<serviceDebug includeExceptionDetailInFaults="true"/>
<serviceCredentials>
<userNameAuthentication userNamePasswordValidationMode="Custom"
customUserNamePasswordValidatorType="MyServ.CustomValidator, MyServ"/>
</serviceCredentials>
</behavior>
</serviceBehaviors>
</behaviors>
客户端过程如下:
var binding = new BasicHttpBinding(BasicHttpSecurityMode.TransportWithMessageCredential);
var endpointAddress = new EndpointAddress(@"https://localhost:8083/MyServ/Service1.svc");
using (var service = new Service1Client(binding, endpointAddress))
{
var loginCredentials = new ClientCredentials();
loginCredentials.UserName.UserName = @"user";
loginCredentials.UserName.Password = @"password";
var defaultCredentials = service.Endpoint.Behaviors.Find<ClientCredentials>();
service.Endpoint.Behaviors.Remove(defaultCredentials); //remove default ones
service.Endpoint.Behaviors.Add(loginCredentials); //add required ones
var data = service.GetData(100);
Console.WriteLine(data);
Console.ReadLine();
}
每次执行service.GetData(100)都会收到SecurityNegotiationException异常。
有人能帮忙吗?
可能有很多原因。不幸的是,WCF错误消息并没有给你一个明确的提示,告诉你哪里出了问题。
如果我是你,我会建议以下路线图:
- 已检查的防火墙规则。查看您的8083端口是否打开
- 检查SLL证书是否正确订阅
netsh http add sslcert ipport=0.0.0.0:8083 certhash={your hash} appid={your id}
- 临时设置
your security mode
为None
,测试wcf服务网站(wsdl site) - 如果您可以看到wcf服务站点,那么将您的客户机调整为
None security mode
并尝试调用一个方法。这行不通。尝试在非常强大的用户 下运行您的客户端 - 当WCF服务在HTTPS下没有问题时,通过用户名和密码输入Auth
as Admin