2008-10-14 20 views
20

Tengo un servicio WCF ejecutándose en el IIS con ServiceHostFactory. Funciona bien con WSHttpBinding, pero debido a la velocidad y a que todo esté en la misma red (sin firewalls), quiero acelerar un poco las cosas usando NetTcpBinding.¿Por qué no puedo conectarme a un servicio de WCF con net.tcp pero puedo con http?

Cuando trato de hacer eso me sale este error:

Could not connect to net.tcp://zzz.xxx.yyy/MyService.svc. The connection attempt lasted for a time span of 00:00:01.0464395. TCP error code 10061: No connection could be made because the target machine actively refused it x.x.x.x:808.

estoy usando SecurityMode.None sólo para asegurarse de que no me buena masturbación También probé ninguno 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 tirando de todo un lof de datos de una de las llamadas de servicio, por lo que yo también poner éstos (tanto en el HTTP y los intentos tcp - establecer MaxMessageSize a 1000000)

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

Debería ser bastante fácil hacerlo funcionar, entonces ¿qué me estoy perdiendo?

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

You have tried to create a channel to a service that does not support .Net Framing. It is possible that you are encountering an HTTP endpoint.

Respuesta

14

Consulte this post para habilitar 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:

vi tu comentario - por desgracia, net.tcp no es compatible con IIS 6.0. Consulte this link, que detalla los enlaces WCF admitidos para varios hosts (incluido el alojamiento propio, WAS e IIS). Parece que solo los enlaces HTTP funcionan en IIS 6.0.

+0

El servicio está alojado en IIS6 aunque :( –

+0

revisé mi respuesta ... parece que IIS6 no admite nada más que HTTP. Estoy en el mismo barco aquí en el trabajo - estamos atrapados en Win2003 por ahora :( –

1

Podría ser algo tan simple como las reglas del firewall en el host de servicio no permitir el puerto 808?

+0

Acabo de verificar y no hay firewalls que bloqueen el tráfico interno, pero gracias. –

23

Si está utilizando Vista, asegúrese de que los servicios del adaptador de escucha WAS y Net.Tcp se estén ejecutando.

+2

+1 Ese Net.Tcp Listener Adapter Service se desconectó por alguna razón:/vitore. –

+1

También tuve que iniciar Net.Tcp Port Sharing Service porque era un servicio dependiente. Ambos estaban deshabilitados. – RandomEngy

+4

WAS significa Servicio de Activación de Proceso de Ventana –

7

Una vez que inicio el servicio de adaptador de escucha Net.Tcp, el servicio funciona bien para mí.

+0

Este fue mi problema. Gracias por el aviso ..... – tsells

1

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

15

Para cualquier persona que se tropieza al otro lado de esto, mi guía a cuestiones net.tcp WCF de solución de problemas como éste:

  1. Compruebe que net.tcp es un protocolo habilitado para el sitio web (en IIS, derecha haga clic en el sitio, vaya a la configuración avanzada y asegúrese de que los Protocolos habilitados incluyan "net.tcp"
  2. No estoy seguro si esto es una paranoia, también siempre tuve que habilitar net.tcp para el Sitio a través del comando línea 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. Compruebe que las conexiones de el sitio web en IIS tiene una entrada para net.tcp, y que lo ha vinculado al número de puerto correcto (para mí, utilizo 9000: * como mi enlace al puerto 9000). También verifique que ningún otro sitio web en IIS esté utilizando la misma red.tcp enlace a ese puerto
  4. Compruebe que el servicio "Net.TCP Listener Adapter" se esté ejecutando.

Hecho.

+1

¡Gracias! 1,2 y 3 estaban en su lugar, pero no 4. ¡Era el Adaptador de escucha de red TCP (y los servicios dependientes) que no funcionaba para mí! Windows Process Activation Services, NET TCP Port Sharing y Net TCP Listener Adapter se han iniciado –

+1

# 3 Funcionó para mí. Tenía dos sitios para compartir net.tcp: 808. h el segundo sitio estaba completamente desactivado, ¡no funcionó! Este es el único lugar donde he visto que los puertos net.tcp no pueden compartirse entre sitios. Buena información –

+0

Era obvio para mí, pero para agregar "net.tcp", simplemente escríbalo en el cuadro de texto (lista delimitada por comas). – Jess

1

también estaba teniendo este problema en Windows Server 2008 R2

Sólo asegúrese de que el servicio net.tcp compartido de puertos también se pone en marcha, ya que es una dependencia del adaptador del Receptor de net.tcp.

Cuestiones relacionadas