2011-12-07 12 views
0

ネットワークアプリケーションを作成していますが、私はWCFを利用しようとしています。最終的にはピアツーピアシステムになりますが、開発のためにアプリケーションをコアアプリケーションとプレーヤアプリケーションに分割しました。これは、WCFサービスがホストとクライアントの両方のデータとやり取りする必要があることを意味します。だから私の質問は、ホストアプリケーション上のオブジェクトとやり取りするサービスを取得する方法です。 ServiceBehaviour属性のInstanceContextModeをInstanceContextMode.Singleに設定すると、クラスインスタンスをServiceHostコンストラクタに渡すことができ、次にホストオブジェクトとやりとりすることができますが、クラスタイプをServiceHostコンストラクタに渡しているときにこれを行う方法これはPerCallまたはPerSession InstanceContextModeを使用している場合に行う必要があります。WCFサービスのホストオブジェクトとのやり取り

WCFサービスのすべての単純な例は、電卓のようなものを使用しています。 Calculatorの例では、クラス/インタフェースのメソッドパラメータを使用してクライアントからデータを渡すことができ、ホスト上のオブジェクトと対話する必要はありません。私は仕事に間違ったツールを使用していますか?

答えて

0

WCFで全二重通信を見てみましょう...あなたはチャットルームの例をたくさん見つけることができます(それは良い並列 - 多くのクライアントが中央サーバーを通じて状態を維持しています)。

http://msdn.microsoft.com/en-us/library/ms731064.aspx

デュプレックスサービス契約は両方 エンドポイントが互いに独立にメッセージを送信可能なメッセージ交換パターンです。したがって、二重 サービスは、メッセージをクライアントエンドポイントに戻すことができます。 は、イベントのような動作を提供します。デュプレックス通信は、 クライアントがサービスに接続し、サービスがクライアントにメッセージを返すことができるチャネル をサービスに提供する場合に発生します。 デュプレックスサービスのイベントのような動作は、 セッション内でのみ機能することに注意してください。質問は、共有サーバーの状態にアクセスする方法で行うことがより多くを持っているように見えます

EDIT ...

はこれを行うにはいくつかの方法があります。私が見

public class MyGameService : IGameService 
{ 
     public PlayerPosition[] GetPlayerPositions() 
     { 
      return GameState.Instance.GetPlayerPositions(); 
     } 
} 
+0

:PerCallとして実装されているサービスで、その後

public class GameState { public static readonly GameState Instance = new GameState() private GameState() { } public PlayerPosition[] GetPlayerPositions() { } } 

:これを行う方法の1つは、共有状態を管理するサーバー側のクラスのシングルトンインスタンスを作成することです先にデュプレックス通信を行う。私は彼らが2つのサービス、それぞれの方向から1つを設定するよりも優れているなら、うまくいきません。ただし、ホストからのデータへのアクセスに関する同じ制限がDuplexサービスに適用されますか? –

+0

クライアントでフルデュプレックスとホスティングのどちらの方法を使うかは1つの質問です(注意:NATとファイアウォールを処理する必要がある場合は、全二重方式が適しています)。しかしいずれにしても、サーバー側で共有状態にアクセスする必要があります。これを行う1つの方法は、ある種のシングルトン・サーバー・インスタンスを公開し、そのシングルトン・インスタンスにサービス・メソッドがアクセスするようにすることです。私はこれを行う一つの方法で私の答えを更新しました。 – RQDQ

関連する問題