7

NetTcpBindingを使用してデュプレックスWCFサービスを作成している最中です。アーキテクチャに関する質問に遭遇しました。答えはわかっていると思いますが、間違っていることを願っています。

私たちのサービスはステートフルであり、NetTcpBindingwithを選択しましたPerSession InstanceContextMode。さまざまな理由から、これは私たちが必要としているものです。大きなインターフェイス(操作の大きなブロックが多くのクライアントに適用されない場合)を、操作が論理的にグループ化された複数の小さなインターフェイスに分割しようとしています。単一のサービス実装ですべてのコントラクトを実装するのは簡単ですが、複数のサービスコントラクトで単一のチャネル(または、私の要件では、単一のセッション)を共有できるかどうかはわかりません。これを機能させるには、間違いなくそれができる必要があります。

もちろん、すべてを1つのコントラクトに含めてFaultException、無効な操作が実行されたときにsをスローすることもできますが、これらを分割して、適用できないコントラクトのエンドポイントを追加することさえできないようにしたいと思います。私が探しているものは可能ですか?

TL; DRバージョン:

私はこれを行うことができる必要があります:

[ServiceContract]
public interface IServiceA
{
    [OperationContract]
    void Foo();
}

[ServiceContract]
public interface IServiceB
{
    [OperationContract]
    void Bar();
}

[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerSession)]
public class Service : IServiceA, IServiceB
{
    ...
}

また、クライアントからサービスへの1つのセッションを確立できますが、との両方IServiceAを使用しIServiceBます。

4

1 に答える 1

4

セッションフル チャネルを介したデフォルトのインスタンス プロバイダーは、この場合、接続ごとにインスタンスを提供します。ただし、インスタンス プロバイダーを拡張して、独自のキャッシュから既存のオブジェクトを取得し、同じオブジェクトを返すことができます。

インスタンスを関連付ける方法は、いくつかの特別なメッセージ ヘッダーなどを使用して決定されます。基になるチャネル/接続はプロキシごとに異なり、異なるバッファー/同時実行モデルも使用しますが、サービス モデルが同じインスタンスを使用できるようにすることができます。 http://msdn.microsoft.com/en-us/magazine/cc163590.aspx

于 2011-10-21T23:43:40.500 に答える