2009-07-17 63 views
3

我看到WCF不直接使用事件,而是使用OneWay委托调用,但是有人可以向我演示一个关于如何执行此操作的简单示例?WCF事件声明

这里是我的设置现在:

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

回答

7

假设你的回调契约接口称为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)); 

这有道理吗?

+0

我不认为我有回调合同,我该如何设置? – 2009-07-17 14:58:33