¿Por qué no puedo conectarme a un servicio WCF con net.tcp pero puedo hacerlo con http?

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

  •  03-07-2019
  •  | 
  •  

Pregunta

Tengo un servicio WCF ejecutándose en el IIS con un ServiceHostFactory. Funciona bien con WSHttpBinding, pero debido a la velocidad y todo lo que está en la misma red (no firewalls), quiero acelerar un poco las cosas usando NetTcpBinding.

Cuando intento hacer eso, aparece este error:

  

No se pudo conectar a net.tcp: //zzz.xxx.yyy/MyService.svc. El intento de conexión duró un período de tiempo de 00: 00: 01.0464395. Código de error TCP 10061: no se pudo establecer conexión porque la máquina de destino lo rechazó activamente x.x.x.x: 808.

Estoy usando SecurityMode.None solo para asegurarme de que no me esté jodiendo. También probé cualquiera de estos en dos intentos diferentes:

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

También debo señalar que estoy extrayendo una gran cantidad de datos de una de las llamadas de servicio, por lo que también los coloco (en los intentos de http y tcp - configurando maxMessageSize en 1000000)

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

Debería ser bastante fácil hacer que funcione, así que, ¿qué me falta?

ACTUALIZACIÓN: agregué el puerto TCP 808 a la identidad del sitio web y lo intenté de nuevo. Ahora me sale este error:

  

Ha intentado crear un canal para un servicio que no es compatible con .Net Framing. Es posible que se encuentre con un punto final HTTP.

¿Fue útil?

Solución

Echa un vistazo a esta publicación sobre la habilitación de enlaces no HTTP en IIS 7.0. De forma predeterminada, debe habilitar explícitamente net.tcp en IIS 7.0.

Espero que esto ayude.

ACTUALIZACIÓN:

Vio su comentario: desafortunadamente, net.tcp no es compatible con IIS 6.0. Consulte este enlace que detalla los enlaces WCF admitidos para varios hosts (incluido auto-alojamiento, WAS, e IIS). Parece que solo los enlaces HTTP funcionan en IIS 6.0.

Otros consejos

Si está utilizando Vista, asegúrese de que se estén ejecutando los Servicios de Adaptador de Escucha WAS y Net.Tcp.

Para cualquier persona que se tropiece con esto, mi guía para solucionar problemas de net.tcp WCF es la siguiente:

  1. Compruebe que net.tcp es un protocolo habilitado para el sitio web (en IIS, haga clic con el botón derecho en el sitio, vaya a la configuración avanzada y asegúrese de que Enabled Protocols incluye " net.tcp "
  2. No estoy seguro de si esto es una cuestión de paranoia, también siempre he necesitado habilitar net.tcp para el Sitio a través de la línea de comandos y el paso 1. Abra un símbolo del sistema y desde c: \ windows \ system32 \ inetsrv , ingrese appcmd.exe set app " NameOfWebsite / " /enabledProtocols:http,net.tcp
  3. Verifique que los enlaces para el sitio web en IIS tengan una entrada para net.tcp, y que lo haya vinculado al número de puerto correcto (para mí, uso 9000: * como mi enlace al puerto 9000). También verifique que ningún otro sitio web en IIS esté utilizando el mismo enlace net.tcp a ese puerto
  4. Compruebe que el " Net.TCP Listener Adapter " el servicio se está ejecutando.

Hecho.

Una vez que inicie el Servicio de Adaptador de Escucha Net.Tcp, el servicio funciona bien para mí.

¿Podría ser algo tan simple como sus reglas de firewall en el host de servicio que no permite el puerto 808?

compruebe si IIS tiene ambos protocolos apuntando al mismo número de puerto, acabo de encontrar si ese es el caso, no funcionará.

También tuve este problema en Windows Server 2008 R2

Solo asegúrese de que el servicio Net.Tcp Port Sharing también se inicie, ya que es una dependencia del adaptador de escucha Net.Tcp.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top