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

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

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

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

Ответы на вопрос(1)

Решение Вопроса

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));

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

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

Ваш ответ на вопрос