我有一个简单的.NET 4 WCF服务,我在IIS7.5上本地托管。最初我使用httpBinding
进行托管,效果很好。然后我将其切换到netTcpBinding
,相应地更改web.config
文件之后也正常工作。但是今天它决定停止工作。我无法使用测试客户端连接到服务,获取:
URI: net.tcp://localhost/case/service.svc/mex Metadata contains a reference that cannot be resolved: 'net.tcp://localhost/case/service.svc/mex'. The message could not be dispatched because the service at the endpoint address 'net.tcp://localhost/case/service.svc/mex' is unavailable for the protocol of the address.
我已检查过(仍然)安装了非http激活服务; net tcp listener服务正在运行; net.tcp位于站点的已启用协议列表中;我跑了servicemodelreg.exe -ia
;我也重新运行aspnet_regiis.exe -i
;最后我检查了网站上的net.tcp绑定。
如果我运行netstat
我可以看到有东西在监听端口,但我无法连接到它。
这让我感到疯狂,因为今天早上工作正常(就像上周一样),现在却没有。
编辑:如果我在IE中访问该服务,那么我可以看到它抛出以下异常:
Could not find a base address that matches scheme net.tcp for the endpoint with binding NetTcpBinding. Registered base address schemes are [http].
但是查看似乎不是这样的web.config
文件:
<services>
<service behaviorConfiguration="ServiceBehavior" name="[REMOVED].[REMOVED]">
<endpoint binding="netTcpBinding" bindingConfiguration="PortSharingBinding" contract="[REMOVED].[REMOVED]" />
<endpoint address="mex" binding="mexTcpBinding" contract="IMetadataExchange" />
</service>
</services>
<bindings>
<netTcpBinding>
<binding name="PortSharingBinding" portSharingEnabled="true">
<security mode="None"/>
</binding>
<binding name="mexTcpBinding" portSharingEnabled="true">
<security mode="None" />
</binding>
</netTcpBinding>
</bindings>
答案 0 :(得分:7)
因此,在IIS上托管WCF net.tcp服务的最终清单是:
Net.Tcp Listener
服务和Net.Tcp Port Sharing
服务都在运行servicemodelreg.exe -ia
以使用IIS注册WCF元素aspnet_regiis.exe -i
以确保使用IIS 答案 1 :(得分:0)
您是否检查过启用了端口共享?
请参阅http://msdn.microsoft.com/en-us/library/ms734772.aspx
编辑 - 对于WAS,还需要另一项服务:
除了NetTcpPortSharing
之外,还需要服务NetTcpActivator
...