WCF wsHttpBinding UserName客户端凭据异常

时间:2012-03-20 08:42:05

标签: wcf exception configuration

情况就是这样。

我们有一台运行IIS 6的Windows Server 2003。

还有一个WCF服务。最重要的配置设置是:

<wsHttpBinding>
   <binding name="wsHttpBinding">
      <security mode="Message">
         <message clientCredentialType="UserName"
                  establishSecurityContext="false" />
      </security>
   </binding>
</wsHttpBinding>
  • defaultSession默认关闭,
  • negotiateServiceCredentials设置为false

服务器使用名为TestWCFCert的自签名X509证书,并使用<serviceCredentials>,<serviceCertificate>编写。

并以身份

<identity>
    <dns value="TestWCFCert" />
</identity>

对于客户端userName身份验证,服务器使用customUserNamePasswordValidatorType,在实现中不会抛出任何异常,因此所有客户端都被排除在外。

客户端在WinXp Sp3机器上,配置非常相似。

它具有相同的身份<dns value="TestWCFCert" />用于服务地址检查。

它还安装了TestWCFCert证书以进行服务器身份验证。

<clientCredentials>
    <serviceCertificate>
        <authentication certificateValidationMode="None" />
        <defaultCertificate findValue="TestWCFCert" 
                            storeLocation="CurrentUser" 
                            storeName="My" x509FindType="FindBySubjectName" />
    </serviceCertificate>
</clientCredentials>

这是有效的。

如果有人试图将establishcontext设置为true。

接下来发生:为某些客户端/服务器通话发送和接收2条消息。并且在第三条消息中,方法调用服务器抛出异常

  

无法找到上下文'xxxx'的协商状态。

那是怎么回事?如果没有EstablishContextnegotiateServiceCredentials无效?

下一个奇怪的情况是,如果我们尝试将negotiateServiceCredentials设置为true(已禁用establishcontext)。然后在客户端有“安全令牌请求包含无效或格式错误的元素”,服务器上没有例外。

服务在互联网上发布,操作非常简单

string GetData(int number);

mex也是httpGetEnabled。客户端不使用代理。

0 个答案:

没有答案