不支持协议'net.tcp'

时间:2010-02-05 10:13:42

标签: wcf wcf-binding

我的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>

4 个答案:

答案 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

访问您的net.tcp端点

解决方案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基地