Декларация о событиях WCF - PullRequest
3 голосов
/ 17 июля 2009

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

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

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

1 Ответ

7 голосов
/ 17 июля 2009

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

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

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

НТН

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...