2016-06-22 6 views
1

WCF、.NET 4.5、Visual Studio 2015を使用し、シングルトンではなくセッション単位のインスタンス化を使用します。提供されるサービスは、tcp.net上の全二重でなければなりません。WCF - 特定のインスタンスに接続する方法

私は2台のマシンがあると、クライアントとして& B ...

Bは、同じマシンB上のWCFサービスとして提供する「サービス」に接続し、オブジェクトを呼び出し、それに話し始めます"バツ"。同じサービスの別のインスタンスに接続し、オブジェクト「Y」と呼ぶ

Aは、クライアントとして、Bが話しているオブジェクトとまったく同じオブジェクトに接続して使用したいとします。オブジェクト "X"と "Y"ただし、リモートリモートではなく、ローカルリモートではありません。

「X」と「Y」は実際にビデオサーバーであり、どちらも「状態」を持っています。

これを行うことはできますか?どのように私がクライアントである場合、私は接続したいサービスインスタンスを指定するのですか?

明らかに、マシン "B"では、 "B"で実行されているいくつかのプロセスと通信する "状態"のないフロントエンドにすることで、これを嫌うかもしれませんが、私が嫌うプロセス間コードの

マシンBは、ローカルのマスター(シングルトン)サービスによってそれぞれ話され、エンドユーザーのマシンと話されるこれらの「ビデオサーバー」インスタンスの100台を実行すると予想されます。

私はこの質問が少し一般的であることを認識していますが、それは私がインターネットで尋ねられた、または答えられなかった質問にも対処しています。

私はただ考えたが、kludge-y解決策を考えました。マスターサービスはシングルトンなので、エンドユーザがサービスインスタンス "X"を作成すると、シングルトンマスターサービスにシングルトンへのプロキシシングルトンは、をコールバックチャネルを介してインスタンス「X」に話すことができます。うん、それはうまくいく!面倒ですが、可能です。

エンドユーザAとエンドユーザBが、マシンCの同じ(非シングルトン)サービスインスタンスに対して、どちらかのファンキーなチャネル操作や何かを話すことができるかどうかを知りたいです。私がWCFのルールを理解しているので、これは単純に不可能です。おそらくあなたはIISの代わりに自分でサービスをホストしている場合でも、それでも可能ではないと思いますか?

答えて

1

私は同じ問題に直面し、2つのサービス参照を作成して解決しました.1つはリモート用のローカル参照用です。 LocalServiceClientRemoteServiceClientとしましょう。クラスで

Client(またはものは何でもあなたがそれを呼びたい)というプロパティを作成します。

public LocalServiceClient Client { 
    get { 
      return new LocalServiceClient(); 
    } 
} 

オーケー、これが唯一の彼らのためです。ちょうど今、別の作成、およびコンパイラフラグを使用するかを設定します。

#if DEBUG 
public LocalServiceClient Client { 
    get { 
      return new LocalServiceClient(); 
    } 
} 
#else 

public RemoteServiceClient Client { 
    get { 
      return new RemoteServiceClient(); 
    } 
} 
#endif 

varキーワードを使用して、Clientのすべてのインスタンスをインスタンス化し、それは暗黙的に型指定されたであろう、あるいは単に直接Clientを使用します。

var client = Client; 
client.DoSomething... 
//or 
Client.DoSomething... 

この方法では、ローカルで作業しているときにローカルサービスに接続し、リリース構成(公開するときはReleaseになっていることを確認してください)にリモートサービス用にコンパイルします。 WCF側でも、両方のサービスに対して正確に同じ署名/コードを持っていることを確認してください。

コード内で動的に行う方法や、web.configのような方法もありますが、通常は過剰です。デバッグではローカルのものに、プロダクションではリモートのものに接続する必要があるでしょう。これは必要なものを正確に提供するでしょう。

関連する問題