2

私は C# で 2 つのアプリケーションを作成しています (一方向のみ)。2 つのアプリは常に同じマシン上で実行されるため、WCF と名前付きパイプを使用し、WCF サービスを自己ホストすることが論理的な選択のように思えました。

InstanceContextModeを使用して、サービス インスタンスがセッションごと、呼び出しごとにインスタンス化されるか、またはインスタンスが 1 つだけ存在する必要があるかを構成できることを理解しています。私の場合は、1 つのインスタンスが必要です。これは、2 つのアプリだけを実行するためです。つまり、1 つのクライアントと 1 つのサーバーが存在します。

しかし、ここで私は立ち往生しています。私のクライアントがサービスを呼び出すとき、私はこのようにしています:

var myServiceFactory = new ChannelFactory<IMyService>(
    new NetNamedPipeBinding(), new EndpointAddress("net.pipe://localhost/MyService"));

IMyService myService = myServiceFactory.CreateChannel();
myService.DoStuff();

サーバー上に新しいサーバー オブジェクト インスタンスを作成したくありません。代わりに、サーバー上で既に構築されている (唯一の) IMyService インスタンスをmyServiceが指すようにしたいと考えています。現時点では、2 番目の IMyService インスタンスが構築されます。

つまり、クライアントが最初に呼び出しを行ったときではなく、(サーバーの起動時に) サーバーによってサーバー オブジェクトが構築されるようにしたいということです。

誰でもこれを行う方法を説明できますか? 私が理解していることから、.NET Remoting はこれを非常に簡単にし、WCF はおそらく Remoting を置き換えたので、簡単な方法があるに違いありません...そうですか?

4

1 に答える 1

4

WCFServiceHostには、まさにこの目的のために、サービスタイプではなくサービスクラスのシングルトンインスタンスを取るコンストラクターがあります。サービス ホストでこのコンストラクターを使用する場合は、InstanceContextMode を Singleton に設定する必要があります。

引用するクライアント側のコードでは、「サーバーオブジェクト」と呼ぶものではないことに注意してくださいIMyService myService...これは、WCFがクライアントから実際のサービスにメッセージをルーティングするクライアント側のプロキシです。

于 2012-08-28T09:06:01.973 に答える