2012-06-04 21 views
8

Sé que hay tutoriales por ahí sobre devoluciones de llamadas y eventos de WCF, pero tengo problemas para conseguir que realmente funcionen, o son demasiado complejos. Soy un verdadero principiante, así que me encantaría saber si alguien sabe de algún tutorial sólido para principiantes que esté dirigido a lo que estoy tratando de resolver específicamente en este momento. Por favor, perdóneme si uso la terminología equivocada (y corrígeme), como dije que soy un principiante.Incendio de eventos al cliente usando WCF

El problema:

enter image description here

al principio puede parecer más complicado de lo que realmente es. Básicamente lo que estoy tratando de lograr es:

  1. Un host con algo de memoria local (digamos una matriz de 5 enteros) y ejecutando un servicio WCF. que escuchará las consultas del cliente Y lanzará una actualización (¿eventos?) al cliente cuando se cambie uno de estos enteros (desde una fuente externa, como la entrada del usuario a través del símbolo del sistema y Set()).
  2. Un cliente que puede realizar consultas directas para devolver uno de estos cinco enteros o suscribirse a un índice particular de la matriz de host.

Lo que puede hacer:

puedo configurar la conexión, pero mi servicio está limitado a funciones independientes. El cliente puede realizar "consultas", pero se limita a las llamadas a funciones remotas (como "agregar", donde todos los parámetros se pasan con la función y el procesamiento se realiza internamente).

Lo que estoy tratando de averiguar:

  1. Cómo puedo acceder a algunas variables almacenados en la memoria de acogida de las funciones de contrato de servicio? Por ejemplo, ¿cómo puedo llamar a un método del cliente GetInt() que simplemente devolvería algo almacenado en la memoria de la aplicación en el host?
  2. ¿Cómo puedo enviar un mensaje al cliente desde el host? Por ejemplo, en el host, llame a TellClient (int x), que llamaría alguna función en el lado del cliente? ¿Es esto posible sin ejecutar un servicio en ambos lados?

TLDR:

Anfitrión: Servicio < -> Cliente. ¿Hay alguna manera de enviar datos (simplemente un int) al cliente sin que el cliente llame a ninguna función (sin sondeo ni consultas)? ¿Hay alguna manera de tener las variables de acceso al servicio WCF almacenadas en la instancia de la aplicación host sin usar miembros estáticos? ¿Se puede lograr esto de una manera simple?

Gracias por su ayuda y tiempo, sé que escribí un libro. Si alguien sabe de algún buen tutorial, por favor avísenme. Pero POR FAVOR: No me señale el ejemplo de Agregar (int x, int y) donde el cliente acaba de llamar agrega en el host y devuelve el resultado - Ya lo he hecho varias veces y no me está ayudando captar la funcionalidad real de WCF. Realmente no estoy tratando de lograr nada serio en este punto, realmente estoy tratando de mantenerlo simple para que pueda aprender lo que WCF puede hacer, y no creo que la documentación sea de mucha ayuda. Gracias de nuevo a todos.

Respuesta

6

En general, WCF se utiliza en un modo de respuesta de solicitud, donde los clientes realizan solicitudes; y el servidor responde. Lo que quiere lograr es un servicio de "empujar y tirar"; o en términos de Microsoft un servicio dúplex.

En los servicios dúplex, los clientes simplemente se conectan a un servicio y el servicio los registra en una lista interna. Y cuando surge un evento (u otra cosa), envía un mensaje a los clientes registrados. La terminología clave para WCF en el contexto de su pregunta es "servicios dúplex" (puede encontrar muchos resultados en google). Puede consultar los siguientes tutoriales; msdn o codeproject

Para la segunda parte de su pregunta, la respuesta es sí. Pero esto no es tan simple. Necesita escribir algunos "comportamientos wcf", por ejemplo, un IInstanceProvider puede ayudarlo. Para todas las solicitudes, puede simplemente crear la instancia de servicio usted mismo, con los parámetros deseados inyectados en la instancia de servicio. En referencia a lo siguiente puede ayudar: stackoverflow o msdn.

La pregunta es un poco amplia por lo que no estoy 100% seguro de si esta es una respuesta directa. Pero al menos usando las palabras clave proporcionadas, puede encontrar la dirección correcta.

+0

Esta es una gran información, muchas gracias por su ayuda, la terminología y las palabras clave eran lo que no sabía, por lo que no pude encontrar lo que estaba buscando mediante la búsqueda. No tengo miedo de hacer la investigación. Ya he encontrado algo mucho más cercano a lo que estoy buscando (buscando servicios dúplex). ¡Gracias de nuevo! – Softerware

Cuestiones relacionadas