3
我看到WCF不直接使用事件,而是使用OneWay委托调用,但是有人可以向我演示一个关于如何执行此操作的简单示例?WCF事件声明
这里是我的设置现在:
[OperationContract(IsOneWay = true)]
void OnGetMapStoryboardsComplete(object sender, List<Storyboard> results);
我看到WCF不直接使用事件,而是使用OneWay委托调用,但是有人可以向我演示一个关于如何执行此操作的简单示例?WCF事件声明
这里是我的设置现在:
[OperationContract(IsOneWay = true)]
void OnGetMapStoryboardsComplete(object sender, List<Storyboard> results);
假设你的回调契约接口称为IMyServiceCallback
,当它要引发该事件的服务将执行以下代码:
IMyServiceCallback callback = OperationContext.Current.GetCallbackChannel<IMyServiceCallback>();
callback.OnGetMapStoryboardsComplete(...);
我发现this article非常有帮助。它描述了一个瞬时事件系统和一个持续事件系统,其中任何一个都应该满足任何和所有事件场景,IMO。
HTH
要建立回调合同:
interface IMyServiceCallback
{
[OperationContract(IsOneWay = true)]
void OnGetMapStoryboardsComplete(object sender, List<Storyboard>);
}
,那么你需要指明您的服务合同上,它是使用这个回调:
[ServiceContract(CallbackContract = typeof(IMyServiceCallback))]
interface IMyService
{
// ...
}
一旦你这样做并实施你的服务,创建一个参考服务。然后,客户机将不得不包括实现IMyServiceCallback
类:当你从客户机到服务连接你需要传递它的对象的引用,将处理的事件建立了一个InstanceContext
class EventHandler : IMyServiceCallback
{
public void OnGetMapStoryBoardsComplete(object sender, List<Storyboard>)
{
// Do whatever needs to be done when the event is raised.
}
}
:
EventHandler eventHandler = new EventHandler();
MyServiceClient client = new MyServiceClient(new InstanceContext(eventHandler));
这有道理吗?
我不认为我有回调合同,我该如何设置? – 2009-07-17 14:58:33