Tengo una aplicación de consola que aloja un servicio WCF. Me gustaría poder desencadenar un evento desde un método en el servicio WCF y manejar el evento en el proceso de alojamiento del servicio WCF. es posible? ¿Cómo haría esto? ¿Puedo derivar una clase personalizada de ServiceHost?Envío de mensajes al proceso de host WCF
14
A
Respuesta
14
No necesita heredar de ServiceHost
. Hay otros enfoques para su problema.
Puede pasar una instancia de la clase de servicio, en lugar de un tipo a ServiceHost
. Por lo tanto, puede crear la instancia antes de iniciar el ServiceHost
y agregar sus propios manejadores de eventos a cualquier evento que exponga.
He aquí algunos ejemplos de código:
MyService svc = new MyService();
svc.SomeEvent += new MyEventDelegate(this.OnSomeEvent);
ServiceHost host = new ServiceHost(svc);
host.Open();
Hay algunas advertencias cuando se utiliza este enfoque, como se describe en http://msdn.microsoft.com/en-us/library/ms585487.aspx
O usted podría tener una clase Singleton bien conocido, que sus instancias de servicio conocen y llama explícitamente a sus métodos cuando suceden los eventos.
0
using ...
using ...
namespace MyWCFNamespace
{
class Program {
static void Main(string[] args){
//instantiate the event receiver
Consumer c = new Consumer();
// instantiate the event source
WCFService svc = new WCFService();
svc.WCFEvent += new SomeEventHandler(c.ProcessTheRaisedEvent);
using(ServiceHost host = new ServiceHost(svc))
{
host.Open();
Console.Readline();
}
}
}
public class Consumer()
{
public void ProcessTheRaisedEvent(object sender, MyEventArgs e)
{
Console.WriteLine(e.From.toString() + "\t" + e.To.ToString());
}
}
}
namespace MyWCFNamespace
{
public delegate void SomeEventHandler(object sender,MyEventArgs e)
[ServiceBehavior(InstanceContextMode=InstanceContextMode.Single)]
public class WCFService : IWCFService
{
public event SomeEventHandler WCFEvent;
public void someMethod(Message message)
{
MyEventArgs e = new MyEventArgs(message);
OnWCFEvent(e);
}
public void OnWCFEvent(MyEventArgs e)
{
SomeEventHandler handler = WCFEvent;
if(handler!=null)
{
handler(this,e);
}
}
// to do
// Implement WCFInterface methods here
}
public class MyEventArgs:EventArgs
{
private Message _message;
public MyEventArgs(Message message)
{
this._message=message;
}
}
public class Message
{
string _from;
string _to;
public string From {get{return _from;} set {_from=value;}}
public string To {get{return _to;} set {_to=value;}}
public Message(){}
public Message(string from,string to)
this._from=from;
this._to=to;
}
}
Puede definir su servicio WCF con InstanceContextMode = InstanceContextMode.Single
.
TestService svc = new TestService();
svc.SomeEvent += new MyEventHandler(receivingObject.OnSomeEvent);
ServiceHost host = new ServiceHost(svc);
host.Open();
[ServiceBehavior(InstanceContextMode=InstanceContextMode.Single)] // so that a single service instance is created
public class TestService : ITestService
{
public event MyEventHandler SomeEvent;
...
...
}
Cuestiones relacionadas
- 1. MEF + WCF ¿Servicio Host?
- 2. Solicitud de envío de envío a RESTful WCF con json
- 3. WCF: ¿Cómo puedo rastrear cuerpos de mensajes?
- 4. WCF: ¿cómo cifro los mensajes?
- 5. Cómo envío mensajes del servidor al cliente usando SignalR Hubs
- 6. Envío y recepción de mensajes SOAP
- 7. WCF y varios encabezados de host
- 8. Apple Push Notification: Envío de grandes volúmenes de mensajes
- 9. WCF - Fallas/Excepciones versus Mensajes
- 10. Interceptar mensajes en un cliente de WCF
- 11. Mecanismo de envío de mensajes de Objective C
- 12. Envío de XML grande de Silverlight a WCF
- 13. Android HttpClient solicitud de envío al equipo host a través de USB
- 14. Envío de SMS/mensajes de texto a través de PHP
- 15. Costo del envío de mensajes en Objective-C
- 16. Proyecto de Android Phonegap envío de mensajes QTAGUID
- 17. ¿Cuáles son las desventajas de RPC con respecto al envío de mensajes?
- 18. El envío de mensajes privados a través de Facebook API
- 19. Secuencia de envío de mensajes en akka actors
- 20. Envío de difusión UDP, recepción de mensajes múltiples
- 21. Pausa de envío al marcador
- 22. WCF el registro de mensajes - añadir filtros con consultas XPath
- 23. Manejo de mensajes de envenenamiento en WCF MSMQ 4.0
- 24. Servicio de host de WCF: puntos finales en C#
- 25. Envío de comandos POP3 a Gmail devuelve los mensajes antiguos
- 26. Envío de mensajes html Multipart que contienen imágenes incrustadas
- 27. Envío TCP no devuelve causa de bloqueo proceso
- 28. envío de XML de jabón sin procesar directamente al servicio WCF desde C#
- 29. WCF: ¿inspeccionar los mensajes enviados/recibidos?
- 30. Apague el host de servicio WCF en Visual Studio
¡Guau! Ambos enfoques tienen perfecto sentido para mí; Me siento tonto. Tampoco pensé en ninguno de esos. Supongo que acabo de cegarme por la complejidad de WCF, ya que es nuevo para mí. – dotnetengineer