WCF Callback между двумя сервисами - PullRequest
0 голосов
/ 15 марта 2012

Я пытаюсь установить соединение между двумя службами.Сервис1 будет отправлять уведомления о событиях на сервис2.

Я хочу использовать обратные вызовы между этими двумя службами.service1 отправит событие service2, а service2 передаст событие клиенту.

Можно ли использовать обратные вызовы между двумя службами?

Я уже рассмотрел примеры обратных вызовов wcf, но не могу найти что-либо между обменом между службами.

Любойпомощь оценена.см. ниже код 1 из услуг.мой вопрос: как будет выглядеть код другой службы с обратным вызовом в ней?

Или в этом случае одна из служб действует как клиент?И как это должно выглядеть?

Код службы 1: (класс интерфейса)

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<IMyEvents>();
        m_Event1 += subscriber.Event1;
    }

    public static void FireEvent()
    {
        m_Event1();
    }

    public void DoSomethingAndFireEvent()
    {
        CCStateHandlerSimulator.FireEvent(); 
    }

1 Ответ

0 голосов
/ 15 марта 2012

Настройте свои службы, добавив ссылку на службу к одной из них (ссылаясь на другую службу).Для этого убедитесь, что служба, на которую ссылаются, запущена и работает, затем щелкните правой кнопкой мыши дочерний проект службы и выберите Добавить ссылку на службу.Теперь вы можете выполнять вызовы методов, предоставляемых родительской службой.

Для обратных вызовов вам потребуется конечная точка, настроенная с дуплексным связыванием.См. здесь для получения информации о дуплексном связывании.Обновите ссылку на службу при добавлении новых конфигураций конечных точек в родительскую службу.Вам нужно будет разместить свои услуги.

Похожий вопрос был поднят здесь .

Ваша точка зрения будет выглядеть следующим образом:

 <endpoint address="http://localhost:61775/DUPLEXFUN/" binding="wsDualHttpBinding"
      bindingConfiguration="" name="DUPEND" contract="IDuplexCallback" />

Обратите внимание наВажным примечанием является 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<IDuplexCallback>();
    }

    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);
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...