6

このようなWCFサービス契約があるとします

[ServiceContract(CallbackContract = typeof(ICallback1),
SessionMode = SessionMode.Required)]
public interface IService1
{
  // some methods
}

サービスの実装はInstanceContextMode.Single設定されてInstanceContextMode おり、ICallback1次のようなものです

public interface ICallback1
{
    [OperationContract]
    void Report(int someValue);
}

クライアント側では、 ICallback1 を実装するクラスを持つことができます

class Callback1 : ICallback1
{
    public void Report(int someValue)
    {
        // alert client
    }
}

そして、このようなクライアントサービス参照を作成します

Service1Client serviceClient = new Service1Client(new InstanceContext(new CallBack1())); 

これは正常に動作します。問題は、コールバックに関心のないクライアントがいくつかあることです。そのため、そのようなクライアントのコールバック インターフェイスを実装する必要はないと考えたので、これを試しました。

 Service1Client serviceClient = new Service1Client(null);

 Service1Client serviceClient = new Service1Client(new InstanceContext(null));

両方とも、parameter cannot be null. 私の質問は、クライアントがコールバックに関心がない場合、コールバック オブジェクトを渡さずにサービス参照を作成するにはどうすればよいかということです。唯一の要件は、すべてのクライアントが同じサービスと通信する必要があることですが、それ以外の場合はサービスを再構築できます。何かご意見は ?

編集:

SessionMode = SessionMode.Allowed代わりに ServiceContractも試し ましSessionMode.Requiredたが、どちらも役に立ちませんでした。

4

1 に答える 1

2

回避策: CallbackContract を IService1 から削除します。IService1 を継承し、CallbackContract を含む IDuplexService1 を作成します。Service1Client に IDuplexService1 を実装させます。ホストをインスタンス化するときはServiceHost.AddServiceEndpoint、IService1 と IDuplexService1 の両方を呼び出します。

于 2011-03-16T04:51:25.567 に答える