visual studio implement example ejemplo consumir c# wcf

c# - studio - Enviar mensajes al proceso de host WCF



wcf visual studio 2017 (2)

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.

Aquí hay un código de muestra:

MyService svc = new MyService(); svc.SomeEvent += new MyEventDelegate(this.OnSomeEvent); ServiceHost host = new ServiceHost(svc); host.Open();

Hay algunas advertencias al usar este enfoque, como se describe en http://msdn.microsoft.com/en-us/library/ms585487.aspx

O bien, podría tener una clase singleton bien conocida, que sus instancias de servicio conozcan y llamar explícitamente a sus métodos cuando ocurran los eventos.

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?


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; ... ... }