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服务客户端引发SecurityNegotiationException异常

可能有很多原因。不幸的是,WCF错误消息并没有给你一个明确的提示,告诉你哪里出了问题。

如果我是你,我会建议以下路线图:

  1. 已检查的防火墙规则。查看您的8083端口是否打开
  2. 检查SLL证书是否正确订阅netsh http add sslcert ipport=0.0.0.0:8083 certhash={your hash} appid={your id}
  3. 临时设置your security modeNone,测试wcf服务网站(wsdl site)
  4. 如果您可以看到wcf服务站点,那么将您的客户机调整为None security mode并尝试调用一个方法。这行不通。尝试在非常强大的用户
  5. 下运行您的客户端as Admin
  6. 当WCF服务在HTTPS下没有问题时,通过用户名和密码输入Auth
相关文章:
  • 没有找到相关文章