2009-07-17 73 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