Вопрос по wcf – Декларация о событиях WCF

3

Я вижу, что WCF напрямую не использует события и вместо этого использует вызовы делегатов OneWay, но может ли кто-нибудь показать мне простой пример того, как это сделать?

Вот что я сейчас настроил:

    [OperationContract(IsOneWay = true)]
    void OnGetMapStoryboardsComplete(object sender, List<Storyboard> results);

Ваш Ответ

1   ответ
7

IMyServiceCallbackваш сервис выполнит следующий код, когда захочет вызвать событие:

IMyServiceCallback callback = OperationContext.Current.GetCallbackChannel<IMyServiceCallback>();
callback.OnGetMapStoryboardsComplete(...);

я нашелЭта статья очень полезно. Он описывает систему переходных событий и постоянную систему событий, каждая из которых должна удовлетворять любым и всем сценариям событий, IMO.

НТН

Чтобы настроить контракт обратного вызова:

interface IMyServiceCallback
{
    [OperationContract(IsOneWay = true)]
    void OnGetMapStoryboardsComplete(object sender, List<Storyboard>);
}

Затем вам нужно указать в контракте на обслуживание, что он использует этот обратный вызов:

[ServiceContract(CallbackContract = typeof(IMyServiceCallback))]
interface IMyService
{
    // ...
}

После того как вы сделали это и внедрили свой сервис, создайте ссылку на сервис. Затем клиент должен будет включить класс, который реализуетIMyServiceCallback:

class EventHandler : IMyServiceCallback
{
    public void OnGetMapStoryBoardsComplete(object sender, List<Storyboard>)
    {
        // Do whatever needs to be done when the event is raised.
    }
}

Когда вы подключаетесь от клиента к сервису, вам нужно передать егоInstanceContext построен со ссылкой на объект, который будет обрабатывать события:

EventHandler eventHandler = new EventHandler();
MyServiceClient client = new MyServiceClient(new InstanceContext(eventHandler));

Имеет ли это смысл?

Это отвечает на ваш вопрос, или у вас все еще есть проблемы?
Я не думаю, что у меня есть контракт обратного вызова, как мне это настроить? Eric Packwood
Позвольте мне отредактировать мой ответ, чтобы показать вам (нужны теги кода). Одна минута...
MyServiceClient client = new MyServiceClient (new InstanceContext (eventHandler)); & lt; - Я не могу выполнить эту часть, потому что моя клиентская сторона не знает реализацию службы, она просто знает интерфейс IMyService, поэтому я создаю его экземпляр с помощью ChannelFactory и конечной точки. Как я могу прикрепить обработчик событий в этом случае?

Похожие вопросы