2011-04-14 710 views
5

(Lea comentario ya que tengo una solución)
Hola,llamada de servicio WCF trabajar con basicHttpBinding pero falla con netTcpBinding

He creado un servicio WCF que Estoy de alojamiento en IIS 7.5 en Windows 7 usando .NET 4.0
El servicio se aloja en http y net.tcp.

He probado mi servicio mediante el WcfTestClient y parece que funciona correctamente a través tanto basicHttp y netTcp .

Sin embargo, cuando intento consumir este servicio a través de mi página web ASP.NET, recibo un error al intentar pasar por nettcp

Mi punto extremo del cliente se ve de la siguiente manera

<system.serviceModel> 
<bindings> 
    <basicHttpBinding> 
    <binding name="Generic_HttpBinding" sendTimeout="00:01:00" receiveTimeout="00:01:00" maxBufferPoolSize="2000000" maxReceivedMessageSize="2000000000"> 
     <security mode="None"/> 
     <readerQuotas maxDepth="2000000" maxStringContentLength="2000000" maxArrayLength="2000000" maxBytesPerRead="2000000" maxNameTableCharCount="2000000"/> 
    </binding> 
    </basicHttpBinding> 
    <netTcpBinding> 
    <binding name="Generic_Binding" sendTimeout="00:01:00" receiveTimeout="00:01:00" maxBufferPoolSize="2000000" maxReceivedMessageSize="2000000000"> 
     <security mode="None"/> 
     <readerQuotas maxDepth="2000000" maxStringContentLength="2000000" maxArrayLength="2000000" maxBytesPerRead="2000000" maxNameTableCharCount="2000000"/> 
    </binding> 
    </netTcpBinding> 
</bindings> 
<client> 
    <endpoint name="EndPointHttp" address="http://localhost:43/Service/MyService.svc" binding="basicHttpBinding" bindingConfiguration="Generic_HttpBinding" contract="NameSpace.Services.Contracts.IService"></endpoint> 
    <endpoint name="EndPoint" address="net.tcp://localhost:42/Service/MyService.svc" binding="netTcpBinding" bindingConfiguration="Generic_Binding" contract="NameSpace.Services.Contracts.IService"></endpoint> 
</client> 

Ahora llamo al servicio de la misma manera simplemente cambiando mi nombre de punto final

var factory = new ChannelFactory<IService>(SuppliedEndpointName); 
factory.Open(); 
var proxy = factory.CreateChannel(); 
var result = proxy.SomeServiceMethod(); 

Si paso este método, el basicHttpBinding funciona perfectamente.
El segundo i SWAP para nettcp, recibo este error inmediatamente:

Excepción: La conexión de socket fue abortado. Esto podría deberse a un error al procesar su mensaje o un tiempo de espera de recepción excedido por el host remoto o un problema de recursos de red subyacente. El tiempo de espera del socket local fue '00: 01: 00 '.

excepción interna: Una conexión existente forzosamente fue cerrada por el host remoto

Código de error: 10054

Por favor, ¿alguien puede ayudar, me está volviendo loco.
Definitivamente he instalado las funciones Activación HTTP WCF y Activación NO HTTP.
He configurado mi enlace para que sea HTTP y net.tcp en diferentes puertos.
He configurado mis protocolos habilitados para http, net.tcp en IIS.
He desactivado mi firewall. He corrido aspnet_regiis -i para .net 4.0

AYUDA!


Finalmente encontré que cambiar el modo de seguridad al transporte soluciona el problema.
Sin embargo, mi servicio tiene el modo de seguridad establecido en ninguno.
Entonces, ¿por qué mi cliente solo funciona con el modo de transporte de seguridad activado?

+0

Típicamente, después de horas de la solución de problemas i pareció que los minutos problema después de presentados esto. Copié la configuración de WcfTestClient sobre la mía para encontrarla. He añadido a mi servicio y al cliente. Pero por alguna razón, el punto final del cliente no funcionará así. Cambiándola a El problema ha sido arreglado. Mi servicio todavía tiene modo de seguridad ninguno. ¿Por qué? – WebDude

+0

¿Ve el servicio escuchando en ese puerto? en netstat – rerun

+0

Esto solo se ejecutó internamente. Hice varias llamadas exitosas a ese puerto. netstat mostró mi servicio escuchando en ese puerto. Según la sugerencia de Aliostad ahora he cambiado mi puerto a la gama 4000 – WebDude

Respuesta

8

netTcpBinding por defecto seguridad de transporte con firma y cifrado.Intente eliminar el elemento security (<security mode="None"/>).


también

puertos bajo 8000 (y sin duda por debajo del 1024) normalmente no son seguros para ser utilizados por los servicios. Intenta usar puertos seguros.

+0

Gracias, ese fue exactamente mi problema. Vi esto cuando el WcfTestClient establece el modo de seguridad en su transporte. – WebDude

+0

¡Genial! Feliz es ordenado ... – Aliostad

Cuestiones relacionadas