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