Perché non riesco a collegarmi a un servizio WCF con net.tcp ma posso farlo con http?

StackOverflow https://stackoverflow.com/questions/201004

  •  03-07-2019
  •  | 
  •  

Domanda

Ho un servizio WCF in esecuzione su IIS con ServiceHostFactory. Funziona bene con WSHttpBinding ma a causa della velocità e di tutto sulla stessa rete (senza firewall), invece, voglio velocizzare un po 'le cose usando NetTcpBinding.

Quando provo a farlo ottengo questo errore:

  

Impossibile connettersi a net.tcp: //zzz.xxx.yyy/MyService.svc. Il tentativo di connessione è durato per un periodo di tempo di 00: 00: 01.0464395. Codice di errore TCP 10061: impossibile stabilire una connessione perché il computer di destinazione lo ha rifiutato attivamente x.x.x.x: 808.

Sto usando SecurityMode.None solo per essere sicuro che non mi stia fottendo, inoltre ho provato uno di questi due tentativi diversi:

binding.Security.Message.ClientCredentialType = MessageCredentialType.None;
binding.Security.Message.ClientCredentialType = TcpClientCredentialType.Windows;,

Inoltre, dovrei sottolineare che sto estraendo un bel po 'di dati da una delle chiamate di servizio, quindi le metto anche (sia sui tentativi http che su tcp - impostando maxMessageSize su 1000000)

binding.MaxReceivedMessageSize = maxMessageSize;
binding.ReaderQuotas.MaxArrayLength = maxMessageSize;

Dovrebbe essere abbastanza facile farlo funzionare, quindi cosa mi sto perdendo?

AGGIORNAMENTO: ho aggiunto la porta TCP 808 all'identità del sito Web e ho riprovato. Ora ho questo errore:

  

Hai provato a creare un canale per un servizio che non supporta .Net Framing. È possibile che si verifichi un endpoint HTTP.

È stato utile?

Soluzione

Scopri questo post sull'abilitazione di associazioni non HTTP in IIS 7.0. Per impostazione predefinita, è necessario abilitare esplicitamente net.tcp in IIS 7.0.

Spero che questo aiuti.

UPDATE:

Ho visto il tuo commento - sfortunatamente, net.tcp non è supportato in IIS 6.0. Dai un'occhiata a questo link che descrive in dettaglio i binding WCF supportati per vari host (tra cui self-hosting, WAS e IIS). Sembra che solo i binding HTTP funzionino in IIS 6.0.

Altri suggerimenti

Se si utilizza Vista, assicurarsi che i servizi dell'adattatore listener WAS e Net.Tcp siano in esecuzione.

Per tutti coloro che si imbattono in questo, la mia guida alla risoluzione dei problemi relativi a WCF net.tcp come questo:

  1. Verifica che net.tcp sia un protocollo abilitato per il sito Web (in IIS, fai clic con il pulsante destro del mouse sul sito, vai a impostazioni avanzate e assicurati che i protocolli abilitati includano " net.tcp "
  2. Non sono sicuro che si tratti di una paranoia, ma ho sempre avuto bisogno di abilitare net.tcp per il Sito tramite la riga di comando e il passaggio 1. Apri un prompt dei comandi e da c: \ windows \ system32 \ inetsrv , inserisci appcmd.exe set app " NameOfWebsite / " /enabledProtocols:http,net.tcp
  3. Verifica che i binding per il sito Web in IIS abbiano una voce per net.tcp e che tu l'abbia associato al numero di porta corretto (per me, uso 9000: * come associazione alla porta 9000). Verifica inoltre che nessun altro sito Web in IIS stia utilizzando lo stesso net.tcp vincolante per quella porta
  4. Verifica che l'adattatore listener Net.TCP " il servizio è in esecuzione.

Fatto.

Una volta avviato il servizio adattatore listener Net.Tcp, il servizio funziona bene per me.

Potrebbe essere qualcosa di semplice come le regole del firewall sull'host del servizio che non consentono la porta 808?

controlla se IIS ha entrambi i protocolli che puntano allo stesso numero di porta, ho appena scoperto che è così, non funzionerà.

Ho riscontrato questo problema anche su Windows Server 2008 R2

Assicurati solo di avviare anche il servizio di condivisione delle porte Net.Tcp, poiché dipende dall'adattatore del listener Net.Tcp.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top