Если ваш интерфейс контракта обратного вызова называется 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));
Имеет ли это смысл?