3

我在本地 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 成功调用这两个服务。关于为什么不为我工作的任何想法?在此先感谢您的帮助。

4

2 回答 2

7

因此,一切都按应有的方式配置。当我在客户端上的服务实例化期间在端点上设置我的 URL 时发生了问题,我/mex在最后包含了,如下所示:

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

事实上,我的 URL 应该是:

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

现在一切都很好,因为我砍掉了/mex.

于 2011-10-26T13:22:19.837 回答
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 上的绑定是开始寻找的地方。

于 2011-10-25T23:02:36.897 回答