我的WCF服务给了我 “不支持协议'net.tcp'”......
<system.serviceModel>
<bindings>
<netTcpBinding>
<binding name="tcpBinding" transferMode="Streamed" portSharingEnabled="false">
<reliableSession enabled="true" />
<security mode="None">
<transport clientCredentialType="None" protectionLevel="None" />
<message clientCredentialType="None" />
</security>
</binding>
</netTcpBinding>
</bindings>
<services>
<service name="JMSysSplash.CommunicationServer.JMSysSplashServer" behaviorConfiguration="Service1Behavior">
<endpoint address="" binding="wsHttpBinding" contract="JMSysSplash.CommunicationClient.IJMSysSplashServer">
<identity>
<dns value="localhost"/>
</identity>
</endpoint>
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
<endpoint address="net.tcp://localhost:8888/JMSysSplashServer" binding="netTcpBinding" bindingConfiguration="tcpBinding" contract="JMSysSplash.CommunicationClient.IJMSysSplashServer"/>
<host>
<baseAddresses>
<add baseAddress="http://localhost:8731/JMSysSplashServer.svc/"/>
<add baseAddress="net.tcp://localhost:8888/JMSysSplashServer"/>
</baseAddresses>
</host>
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="Service1Behavior">
<serviceMetadata httpGetEnabled="true"/>
<serviceDebug includeExceptionDetailInFaults="true"/>
</behavior>
</serviceBehaviors>
</behaviors>
答案 0 :(得分:11)
请检查是否安装了“.NET功能 - &gt; WCF激活 - &gt;非HTTP激活”功能(“服务器管理器 - >添加/删除功能”)。我假设您在IIS中托管服务。在这种情况下,还请检查网站是否允许net.tcp协议(网站 - &gt;高级设置 - &gt;启用协议)和“Net.Tcp Listner Adapter”Windows服务正在运行。
答案 1 :(得分:2)
你没有提到谁是主持人。如果您使用IISExpress进行托管,请注意它不支持net.tcp。来自http://www.iis.net/learn/extensions/introduction-to-iis-express/iis-express-faq:
问:是否支持WCF应用程序?
答:是的,IIS Express支持WCF应用程序。如上所述,仅通过HTTP或HTTPS支持WCF。不支持在MSMQ和net.tcp上的WCF。
答案 2 :(得分:1)
我知道这已经过时了并且已经回答了,但是我遇到了类似的问题并且分辨率不同。
尽管Daniil是正确的,但是错过了安装会导致弹出相同的错误,我的问题会有所不同,并且写下这个答案会让其他人受益。
问题#1 在应用程序所在的网站的IIS中,右键单击并单击“编辑绑定”。
确保net.tcp作为其中一个绑定信息设置为“808:*”的绑定存在。
问题#2 在IIS的应用程序节点中,转到“高级设置”并检查net.tcp是否在启用的协议列表中。例如如果您需要支持后两种协议,“http,net.tcp”将起作用。
希望这有帮助。
答案 3 :(得分:0)
您缺少nettcp的基址 - 或者您需要在端点中定义完整的netTCP地址。您当前的netTcp端点如下所示:
<endpoint address="" binding="netTcpBinding"
您没有指定完整地址 - &gt; WCF正在寻找net.tcp使用的基地 - 但没有!
解决方案1 :为netTcp添加baseAddress
:
<services>
<service name="JMSysSplash.CommunicationServer.JMSysSplashServer" behaviorConfiguration="Service1Behavior">
.....
<host>
<baseAddresses>
<add baseAddress="http://localhost:8731/JMSysSplashServer.svc/"/>
<add baseAddress="net.tcp://localhost:8888/JMSysSplashServer"/>
</baseAddresses>
</host>
</service>
</services>
现在可以通过net.tcp://localhost:8888/JMSysSplashServer
解决方案2 :在net.Tcp端点中定义完整地址:
<services>
<service name="JMSysSplash.CommunicationServer.JMSysSplashServer"
behaviorConfiguration="Service1Behavior">
<endpoint address="" binding="wsHttpBinding"
contract="JMSysSplash.CommunicationClient.IJMSysSplashServer">
<identity>
<dns value="localhost"/>
</identity>
</endpoint>
<endpoint address="mex" binding="mexHttpBinding"
contract="IMetadataExchange"/>
<endpoint
address="net.tcp://localhost:8888/JMSysSplashServer"
binding="netTcpBinding" bindingConfiguration="tcpBinding"
contract="JMSysSplash.CommunicationClient.IJMSysSplashServer"/>
.......
</service>
</services>
定义端点时,
net.tcp
和端口号以及所有)OR:
address=""
),但在这种情况下,您必须该方案的基地址(此处:{{1 }) - 不仅仅是一个http基地