2010-02-05 3 views
6

mio WCFservice mi sta dando "Il protocollo 'net.tcp' non è supportato" ...Il protocollo 'net.tcp' non è supportato

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

risposta

0

ti manca un indirizzo di base per nettcp - oppure è necessario definire un indirizzo netTCP completo nel proprio endpoint. Il tuo attuale endpoint netTcp si presenta così:

 <endpoint address="" binding="netTcpBinding" 

Non si specifica un indirizzo completo -> WCF è alla ricerca di un indirizzo di base per net.tcp da usare - ma non c'è nessuno!

Soluzione 1: aggiungere un baseAddress per netTcp:

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

Ora il vostro punto finale net.tcp può essere raggiunto a net.tcp://localhost:8888/JMSysSplashServer

Soluzione 2: definire un indirizzo completo nella vostra rete. Punto finale 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> 

Quando si bene un endpoint, è

  • sia definire una indirizzo completo (con net.tcp e numero di porta e tutto)

O:

  • si definisce un indirizzo relativo (ad esempio address="") ma in questo caso, è necessario disporre di un indirizzo di base per detto regime (qui: net.tcp) - non solo un indirizzo di base http
10

Si prega di verificare che" Funzioni .NET -> Attivazione WCF -> Non -HTTP attivazione "è installata la funzione (" gestore server -> aggiungi/rimuovi funzionalità "). E presumo che tu ospiti il ​​servizio in IIS. In questo caso, verificare anche se è consentito il protocollo net.tcp per un sito Web (Sito Web -> Impostazioni avanzate -> Protocolli abilitati) e il servizio Windows "Net.Tcp Listner Adapter" è in esecuzione.

1

So che questo è vecchio e ha risposto, ma ho affrontato un problema simile con una risoluzione diversa.

Sebbene Daniil sia corretto, mancare che l'installazione causi lo stesso errore di apertura del mio problema era un po 'diverso e scrivere questa risposta verso il basso per gli altri benefici.

numero 1 In IIS nel sito Web in cui si trova l'applicazione, fare clic con il pulsante destro del mouse e fare clic su "Modifica collegamenti".

Assicurarsi che net.tcp sia presente come una delle associazioni con informazioni di rilegatura impostate su "808: *".

numero 2 Nel nodo dell'applicazione in IIS, accedere a "Impostazioni avanzate" e verificare se net.tcp si trova nell'elenco dei protocolli abilitati. per esempio. "http, net.tcp" potrebbe funzionare se è necessario supportare entrambi gli ultimi protocolli.

Spero che questo aiuti.