2012-06-19 23 views
11

He creado con éxito un servicio WCF que funciona como yo quiero. El único problema es que no puedo acceder al servicio web desde cualquier cosa que no sea la máquina real que está ejecutando el servicio WCF.¿Cómo acceder al servidor local WCF desde otro dispositivo?

Entiendo que el servicio web Cassini es solo local, quiero poder ejecutar el servicio WCF en el sistema de mis clientes siempre que necesiten el servicio en mi aplicación de escritorio.

¿Alguien sabe de una manera fácil de hacer esto sin que el cliente instale nada más que .NET Framework?

Gracias

Respuesta

12

Use self-hosting para albergar en su propia aplicación/servicio. Si ya tiene el servicio WCF, debería ser una simple cuestión crear un servicio de Windows y alojarlo allí (ver enlace).

+0

Ya he estado usando WebServiceHost, pero parece que no funciona para mí. Acceder a la IP de mi sistema: el puerto no abre la página de servicio –

+9

Podría ser el firewall o que el usuario no tiene privilegios suficientes para alojar en el puerto que está utilizando. http://msdn.microsoft.com/en-us/library/ms733768.aspx – driis

+0

¿Puede explicar el escenario que debería tomar? Si estoy utilizando REST, ¿cómo permitiría que un dispositivo remoto como mi iPhone haga llamadas al servicio, a través del archivo HTML basado en JS –

3

WCF no necesita un servidor web para alojar un servicio. Sin embargo, algo debe estar ejecutándose, ya sea una aplicación de consola/host o un servicio de Windows. Luego, al inicio, puede exponer el servicio al crear una instancia de la clase ServiceHost. Consulte el ejemplo de MSDN en http://msdn.microsoft.com/en-us/library/system.servicemodel.servicehost.aspx

+1

Vea el comentario que publiqué en la respuesta driis –

+1

ServiceHost, no WebServiceHost, a menos que su servicio WCF esté usando métodos basados ​​en REST (WebGet, etc.) – Rich

+1

Sí, está utilizando métodos REST base. ¿Algún otro pensamiento? –

2

Para ejecutar un servicio WCF, necesita un proceso de host. No hay forma de evitar eso.

Si el proceso de host puede (dependiendo de los requisitos, modelo de implementación, restricciones de red, etc. aplicables a su caso) ser el mismo que su aplicación de escritorio, luego incruste el servicio en su aplicación de escritorio. Esta técnica se llama alojamiento de WCF "in-proc". Básicamente es el servicio "Self Hosting" en la aplicación cliente. Si adopta esta solución, use un enlace IPC (net.pipe) ya que es más óptimo, y borre todas las posibles consideraciones de red/firewall.

Si el servicio necesita ejecutarse en una computadora diferente o en un proceso diferente, entonces necesita usar o implementar una aplicación de host. IIS, WAS, AppFabric y WCFServiceHost (no es un host de grado de producción), son algunos ejemplos de hosts listos para usar que puede usar. Si no puede o no desea utilizarlos, deberá implementar su propia aplicación de host y "Servidor de host" el servicio de WCF en ella. Su aplicación puede ser cualquier cosa: consola, escritorio, servicio de Windows, etc. Si no desea que los usuarios se preocupen por cómo y cuándo iniciar el host, asegúrese de que esté ejecutándose en todo momento. Se recomienda un servicio de Windows que se inicie automáticamente.

Si el servicio debe ejecutarse en una computadora diferente del cliente, asegúrese de que todos los dispositivos de red y software (firewalls, enrutadores, puertas de enlace, etc.) entre el servidor y el cliente estén configurados correctamente para su encuadernación trabajar. Tenga en cuenta el protocolo (http, tcp, etc.) y el puerto (80, 443, 808, etc.) en los que opera su enlace.

0

Aquí está la sugerencia, si no es adecuada, ignórela: use un servicio alojado como se menciona en @driis. Esa es tu mejor opción para tu escenario. Acerca de alojar una página HTML dentro de su servicio WCF ... sí, es posible, pero esta no es una solución simple. Para resumir en una oración, debe crear su formateador de mensajes personalizado y eludir el predeterminado proporcionado por WCF.Debería crear un HtmlBehavior que debe heredar de WebHttpBehavior, HtmlBehaviorExtension que debe heredar de BehaviorExtensionElement y finalmente un HtmlFormater que implementaría IDispatchMessageFormatter. En el siguiente enlace encontrará un excelente artículo sobre formateadores personalizados: http://blogs.msdn.com/b/carlosfigueira/archive/2011/05/03/wcf-extensibility-message-formatters.aspx

Cuestiones relacionadas