运维开发网

.net – 在IIS7.5上托管的WCF netTcpBinding停止工作

运维开发网 https://www.qedev.com 2020-06-19 11:02 出处:网络 作者:运维开发网整理
我有一个简单的.NET 4 WCF服务,我在IIS7.5上本地托管.最初我使用httpBinding托管它工作正常.然后我将其切换到netTcpBinding,相应地更改web.config文件后也正常工作.但是今天它决定停止工作.我根本无法使用测试客户端连接到服务,获得: URI:net.tcp://localhost/case/service.svc/mex元数据包含无法解析的引用:’net.
我有一个简单的.NET 4 WCF服务,我在IIS7.5上本地托管.最初我使用httpBinding托管它工作正常.然后我将其切换到netTcpBinding,相应地更改web.config文件后也正常工作.但是今天它决定停止工作.我根本无法使用测试客户端连接到服务,获得:

URI:net.tcp://localhost/case/service.svc/mex元数据包含无法解析的引用:’net.tcp://localhost/case/service.svc/mex’.无法分派消息,因为端点地址’net.tcp://localhost/case/service.svc/mex’上的服务不可用于地址协议.

我已经检查过(仍然)安装了非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>
好的,终于解决了.我在站点级别启用了net.tcp协议,但是在应用程序级别没有启用它.我想它一定是以前的,我想我可能在更改项目名称之前创建了一个新的应用程序,显然忘了在应用程序上设置协议 – doh!

因此,在IIS上托管WCF net.tcp服务的最终清单是:

>确保已安装WCF非HTTP激活服务>确保Net.Tcp侦听器服务和Net.Tcp端口共享服务都在运行>将net.tcp添加到站点和应用程序的已启用协议(要从IIS管理器访问“高级设置”选项,您必须具有http绑定)>运行servicemodelreg.exe -ia以使用IIS注册WCF元素>运行aspnet_regiis.exe -i以确保使用IIS正确设置.NET>将net.tcp绑定添加到站点

0

精彩评论

暂无评论...
验证码 换一张
取 消