两个服务之间的WCF回调

我想在两个服务之间建立连接。 Service1将向service2发送事件通知。

我想在这两个服务之间使用回调。 service1将事件发送到service2,service2将事件传递给客户端。

是否可以在两个服务之间使用回调?

我已经查看了wcf回调的示例,但是无法在服务与服务通信之间找到任何内容。

任何帮助都是适用的。 请参阅下面的1个服务的代码。 我的问题:其他服务的代码如何与回调中的代码相似?

或者在这种情况下,其中一项服务就像客户一样? 那怎么样?

Service1代码:(接口类)

public interface IMyEvents { [OperationContract(IsOneWay = true)] void Event1(); } [ServiceContract(SessionMode = SessionMode.Required, CallbackContract = typeof(IMyEvents))] public interface SampleInterface { [OperationContract] void DoSomethingAndFireEvent(); [OperationContract] void SubscribeEvent(); } 

这是服务类

 public class SampleHandlerSimulator : SampleInterface { static Action m_Event1 = delegate { Console.WriteLine("Catch");}; public void SubscribeEvent() { IMyEvents subscriber = OperationContext.Current.GetCallbackChannel(); m_Event1 += subscriber.Event1; } public static void FireEvent() { m_Event1(); } public void DoSomethingAndFireEvent() { CCStateHandlerSimulator.FireEvent(); } 

通过向其中一个服务引用添加服务引用来配置服务(请参阅其他服务)。 为此,请确保要引用的服务已启动并正在运行,然后右键单击子服务项目并选择“添加服务引用”。 现在,您可以调用父服务公开的方法。

您将需要一个配置了双工绑定的端点用于回叫。 有关双面装订的信息,请参见此处 将新端点配置添加到父服务时,请更新服务引用。 您需要托管您的服务。

这里提出了类似的问题。

您的观点将如下所示:

   

请注意,wsDualHttpBinding是需要注意的重要事项。

您的服务合同将如下所示:

  [ServiceContract(SessionMode = SessionMode.Required, CallbackContract = typeof(IDuplexCallback))] public interface IDuplexService { [OperationContract(IsOneWay = true)] void FormatString(string institution); } 

并且服务实现将如下:

  [ServiceBehavior(InstanceContextMode = InstanceContextMode.PerSession)] public class DuplexService : IDuplexService { IDuplexCallback _callback; string _requestString = String.Empty; public DuplexService() { _callback = OperationContext.Current.GetCallbackChannel(); } public void FormatString(string text) { //Make the thread to sleep for 10 seconds Thread.Sleep(4000); //Format the input data _requestString = string.Format("Welcome to {0}", text); //Pass the string to the client through the call back function _callback.DuplexCallbackFunction(_requestString); } } 

最后IDuplexCallback声明为:

  public interface IDuplexCallback { [OperationContract(IsOneWay = true)] void DuplexCallbackFunction(string requestString); }