假设你的回调合约接口被调用IMyServiceCallback
,您的服务在想要引发事件时将执行以下代码:
IMyServiceCallback callback = OperationContext.Current.GetCallbackChannel<IMyServiceCallback>();
callback.OnGetMapStoryboardsComplete(...);
I found 本文很有帮助。它描述了一个瞬态事件系统和一个持久事件系统,在我看来,这两个系统都应该满足任何和所有事件场景。
HTH
设置回调合约:
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));
那有意义吗?