2010-02-05 204 views
6

我WCFservice是給我 「‘的net.tcp’不支持協議」 ...協議「的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

你缺少一個基址nettcp - 或者您需要在您的端點中定義完整的netTCP地址。您當前的netTcp端點看起來是這樣的:

 <endpoint address="" binding="netTcpBinding" 

不指定一個完整的地址 - > 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端點可以在net.tcp://localhost:8888/JMSysSplashServer

解決方案2達到了:在你的淨定義一個完整的地址。 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> 

當你de細的端點,則

  • 要麼限定完整地址(與net.tcp和端口號以及所有)

OR:

  • 你定義一個相對地址(例如address=""),但在這種情況下,你必須基址爲方案(這裏:net.tcp) - 不只是一個http基址
10

請檢查」 .NET功能 - > WCF激活 - >非-HTTP激活「功能(」服務器管理器 - >添加/刪除功能「)。我假設你在IIS中託管服務。在這種情況下,請檢查網站是否允許使用net.tcp協議(網站 - >高級設置 - >啓用協議),並且「Net.Tcp Listner Adapter」windows服務正在運行。

1

我知道這是舊的和回答,但我面臨一個類似的問題與不同的決議。

雖然Daniil是正確的,但錯過安裝將導致相同的錯誤彈出我的問題是有點不同,寫下這個答案爲其他人的好處。

問題#1 在您的應用程序所在的網站的IIS中,右鍵單擊並單擊「編輯綁定」。

確保net.tcp作爲其中一個綁定信息設置爲「808:*」的綁定信息。

問題#2 在IIS的應用程序節點中,轉至其「高級設置」並檢查net.tcp是否在啓用的協議列表中。例如如果你需要支持後面的兩種協議,「http,net.tcp」就可以工作。

希望這會有所幫助。