如何修复WCF“net.tcp不支持请求升级”错误?

时间:2011-10-25 12:46:15

标签: c# .net wcf exception-handling net.tcp

我在我的本地IIS7上运行了一个asp.net mvc 3应用程序。这引用了一个非常有效的WCF服务。

我最近添加了对同一位置托管的其他服务的引用,并在调用方法时出现以下错误:

  

'net.tcp:// webdev02:15001 / CommonService / Service.svc / mex'不支持请求的升级。这可以   是由于不匹配的绑定(例如,启用了安全性)   客户端而不是服务器上。)

服务中的web.config在第一个工作服务和第二个非工作服务的绑定之间具有相同的设置。在我的客户那个故事。

我也使用我的Windows凭据进行连接,如下所示:

svc.ClientCredentials.Windows.ClientCredential.UserName = "myname";
svc.ClientCredentials.Windows.ClientCredential.Password = "mypass";

此外,我可以使用WcfTestClient成功调用这两个服务。有什么想法,为什么一个人不会为我工作?在此先感谢您的帮助。

2 个答案:

答案 0 :(得分:7)

所以一切都按原样配置。在客户端的服务实例化期间在端点上设置URL时出现问题,我在最后包含/mex,如下所示:

net.tcp://webdev02:15001/CommonService/Service.svc/mex

实际上我的网址应该是:

net.tcp://webdev02:15001/CommonService/Service.svc

现在切断了/mex

,一切都很好

答案 1 :(得分:0)

mex是元数据,(通常)不需要凭据来查看。我首先看一下元数据(mex)交换的服务端点设置。

我还没有在net.tcp上做过WCF,但这是我的HTTP WCF应用程序中的一个例子:

   <endpoint
      address=""
      binding="wsHttpBinding"
      bindingConfiguration="RequestUserName"
      contract="MyService.IContract"/> 
   <endpoint contract="IMetadataExchange" binding="mexHttpBinding" address="mex" />
  </service>

我可以在没有凭据的情况下查看带有绑定设置为mexHttpBinding的wsdl,而通过将wsHttpBinding设置为以下方法来保护这些方法:

 <wsHttpBinding>
    <binding name="RequestUserName">
        <security mode="Message">
        <message clientCredentialType="UserName" />
        <transport clientCredentialType="None" proxyCredentialType="None" />
      </security>
    </binding>
  </wsHttpBinding>

同样,我没有net.tcp WCF的直接经验,但我相信你对IMetadataExchange的绑定是从哪里开始寻找。