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

は、コールバック契約を設定するには:あなたが行われた後

[ServiceContract(CallbackContract = typeof(IMyServiceCallback))] 
interface IMyService 
{ 
    // ... 
} 

interface IMyServiceCallback 
{ 
    [OperationContract(IsOneWay = true)] 
    void OnGetMapStoryboardsComplete(object sender, List<Storyboard>); 
} 

次に、あなたはそれがこのコールバックを使用していることを、あなたのサービス契約に指定する必要がありあなたのサービスを実装し、そのサービスへの参照を作成します。

:あなたはそれにイベントを処理するオブジェクトへの参照で構築された InstanceContextを渡す必要があるサービスにクライアントから接続する場合

class EventHandler : IMyServiceCallback 
{ 
    public void OnGetMapStoryBoardsComplete(object sender, List<Storyboard>) 
    { 
     // Do whatever needs to be done when the event is raised. 
    } 
} 

:クライアントは、IMyServiceCallbackを実装するクラスを含める必要があります

EventHandler eventHandler = new EventHandler(); 
MyServiceClient client = new MyServiceClient(new InstanceContext(eventHandler)); 

意味がありますか?

+0

私はコールバック契約を結んでいないと思いますが、どうすれば設定できますか? –

+0

私の答えを編集してあなたに見せる(コードタグが必要)。 1分... – Malcolm

+1

あなたの質問に答えますか、それでも問題はありますか? – Malcolm

関連する問題