我在我的本地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成功调用这两个服务。有什么想法,为什么一个人不会为我工作?在此先感谢您的帮助。
答案 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的绑定是从哪里开始寻找。