web-dev-qa-db-fra.com

Pourquoi ne puis-je pas me connecter à un service WCF avec net.tcp mais je peux avec http?

J'ai un service WCF exécuté sur le IIS avec un ServiceHostFactory. Il fonctionne très bien avec le WSHttpBinding mais à cause de la vitesse et de tout sur le même réseau (pas de pare-feu), je veux accélérer les choses un peu en utilisant le NetTcpBinding à la place.

Lorsque j'essaie de faire cela, j'obtiens cette erreur:

Impossible de se connecter à net.tcp: //zzz.xxx.yyy/MyService.svc. La tentative de connexion a duré 00: 00: 01.0464395. TCP code d'erreur 10061: Aucune connexion n'a pu être établie car la machine cible l'a activement refusée x.x.x.x: 808.

J'utilise SecurityMode.None juste pour m'assurer que ça ne me gâche pas aussi j'ai essayé l'un ou l'autre de ces deux essais différents:

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

Je dois également souligner que je tire pas mal de données de l'un des appels de service, donc je les ai également mis (à la fois sur les tentatives http et tcp - définissant maxMessageSize sur 1000000)

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

Il devrait être assez facile de le faire fonctionner, alors qu'est-ce qui me manque?

MISE À JOUR: J'ai ajouté le TCP port 808 à l'identité du site Web et j'ai réessayé. Maintenant, je reçois cette erreur:

Vous avez essayé de créer un canal vers un service qui ne prend pas en charge le .Net Framing. Il est possible que vous rencontriez un point de terminaison HTTP.

21

Découvrez cet article sur l'activation des liaisons non HTTP dans IIS 7.0. Par défaut, vous devez activer explicitement net.tcp dans IIS 7.0.

J'espère que cela t'aides.

METTRE À JOUR:

Vu votre commentaire - malheureusement, net.tcp n'est pas pris en charge dans IIS 6.0. Consultez ce lien qui détaille les liaisons WCF prises en charge pour divers hôtes (y compris l'auto-hébergement, WAS et IIS). Il semble que seules les liaisons HTTP fonctionnent dans IIS 6.0.

15
David Mohundro

Si vous utilisez Vista, assurez-vous que les services WAS et Net.Tcp Listener Adapter sont en cours d'exécution.

23
Vinny

Pour tous ceux qui tombent sur cela, mon guide pour résoudre les problèmes de WCF net.tcp comme celui-ci:

  1. Vérifiez que net.tcp est un protocole activé pour le site Web (dans IIS, cliquez avec le bouton droit sur le site, passez aux paramètres avancés et assurez-vous que les protocoles activés incluent "net.tcp"
  2. Je ne sais pas si c'est une chose paranoïaque, j'ai également toujours eu besoin d'activer net.tcp pour le site via la ligne de commande ainsi que l'étape 1. Ouvrez une invite de commande et à partir de c:\windows\system32\inetsrv, entrer appcmd.exe set app "NameOfWebsite/" /enabledProtocols:http,net.tcp
  3. Vérifiez que les liaisons pour le site Web dans IIS ont une entrée pour net.tcp et que vous l'avez liée au numéro de port correct (pour moi, j'utilise 9000: * comme ma liaison) au port 9000). Vérifiez également qu'aucun autre site Web dans IIS n'utilise la même liaison net.tcp à ce port
  4. Vérifiez que le service "Net.TCP Listener Adapter" est en cours d'exécution.

Terminé.

15
Matt Roberts

Une fois que j'ai démarré le service d'adaptateur d'écoute Net.Tcp, le service fonctionne bien pour moi.

7
rosi

Serait-ce quelque chose d'aussi simple que vos règles de pare-feu sur l'hôte de service interdisant le port 808?

1
ZombieSheep

J'avais également ce problème sur Windows Server 2008 R2

Assurez-vous simplement que le service de partage de port Net.Tcp est également démarré, car il s'agit d'une dépendance de l'adaptateur d'écoute Net.Tcp.

1
Werner Bisschoff

vérifier si IIS a les deux protocoles pointant vers le même numéro de port, je viens de trouver si c'est le cas, cela ne fonctionnera pas.

1
amitdotchauhan