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

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

  •  03-07-2019
  •  | 
  •  

Question

Un service WCF est exécuté sur IIS avec ServiceHostFactory. Cela fonctionne très bien avec WSHttpBinding, mais à cause de la vitesse et de tout ce qui se trouve sur le même réseau (pas de pare-feu), je souhaite accélérer les choses en utilisant plutôt NetTcpBinding.

Quand 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. Code d'erreur TCP 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 ce n'est pas me foutre aussi j'ai essayé l'un de ces essais sur deux essais différents:

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

Je tiens également à souligner que je tire assez de données d'un des appels de service. Je les mets donc également (à la fois sur les tentatives http et tcp - réglage de maxMessageSize sur 1000000)

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

Cela devrait être assez facile de le faire fonctionner, alors que me manque-t-il?

UPDATE: j'ai ajouté le port TCP 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 .Net Framing. Il est possible que vous rencontriez un point de terminaison HTTP.

Était-ce utile?

La solution

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 vous aidera.

MISE À 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 différents hôtes (y compris auto-hébergement, WAS et IIS). Il semble que seules les liaisons HTTP fonctionnent dans IIS 6.0.

Autres conseils

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

Pour ceux qui trébuchent, notre guide sur la résolution des problèmes de net.tcp WCF comme celui-ci:

  1. Vérifiez que net.tcp est un protocole activé pour le site Web (dans IIS, cliquez avec le bouton droit de la souris sur le site, accédez aux paramètres avancés et assurez-vous que les protocoles activés incluent "net.tcp"
  2. Je ne suis pas sûr qu'il s'agisse d'un problème de paranoïa. J'ai également toujours eu besoin d'activer net.tcp pour le site via la ligne de commande et à l'étape 1. Ouvrez une invite de commande et à partir de c: \ windows \ system32 \ inetsrv , entrez appcmd.exe set app " NameOfWebsite / " /enabledProtocols:http,net.tcp
  3. Vérifiez que les liaisons du site Web dans IIS ont une entrée pour net.tcp et que vous l'avez lié au bon numéro de port (pour moi, j'utilise 9000: * comme liaison vers le 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 "Net.TCP Listener Adapter " le service est en cours d'exécution.

Terminé.

Une fois que je lance le service d'adaptateur Net.Tcp Listener, le service fonctionne correctement pour moi.

Cela pourrait-il être aussi simple que vos règles de pare-feu sur l'hôte de service refusant le port 808?

vérifie si IIS a les deux protocoles pointant vers le même numéro de port, je viens de constater que si tel est le cas, cela ne fonctionnera pas.

Je rencontrais é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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top