2016-03-31 12 views
0

私はWCFサービスを使用して地雷探偵ゲームを作ろうとしています。私はクライアントからサービスに接続し、メソッドを遠隔から呼び出し、返すものを得ることができるようです。複数のクライアントが自分のWCFサービスに干渉しなければならないときの問題

問題は、サービス側では、私は配列を使用しています。クライアントがサービスに接続するたびに、配列は自動的に更新されるはずですが、クライアントが接続するたびに配列が0にリセットされます。

ここにあなたが見たいかもしれませんコードです:ここでサービス・インターフェースで

、IService1.cs

public interface IDemineur 
{ 
    [OperationContract] 
    string CreationJoueur(string Name); 
    [OperationContract] 
    CompositeType GetDataUsingDataContract(CompositeType composite); 

    // TODO: Add your service operations here 
} 

Service1.svc

public class Service1 : IDemineur 
{ 
    Dictionary<int, Grille> Gamepad = new Dictionary<int, Grille>(); 
    int[,] tableGrilles = new int[20, 3]; 

    public string CreationJoueur(string Name) 
    { 
     string joueur = ""; 

     for (int i = 0; i < 20; i++) 
     { 
      if (tableGrilles[i, 0] != 1) 
      { 
       tableGrilles[i, 0] = 1; 
       tableGrilles[i, 2] = i; 
       joueur = "1/" + tableGrilles[i, 2]; 
       Gamepad.Add(i, new Grille()); 

       break; 
      } 
      if (tableGrilles[i, 1] != 2) 
      { 
       tableGrilles[i, 1] = 2; 
       joueur = "2/" + tableGrilles[i, 2]; 

       break; 
      } 
     } 

     return joueur; 
    } 

が、ポイントはトンでしたo配列tableGrillesを更新します。私はホストのためのデバッグを実行すると、私はそれを更新することをはっきりと見ることができますが、別のクライアントと接続するたびに、私のブレークポイントで再びデバッグモードに入り、配列は0に戻ります。

クライアント側:はるかに高く評価されるだろう

public partial class DemineurGrille : Window 
{ 
    ServiceReference1.DemineurClient leDemineur; 
    int noJoueur; 
    int noGrille; 

    public DemineurGrille(string name) 
    { 
     InitializeComponent(); 
     leDemineur = new ServiceReference1.DemineurClient("*"); 

     string noJoueurGrille = leDemineur.CreationJoueur(name); 
     string[] leSplit = noJoueurGrille.Split('/'); 
     noJoueur = Convert.ToInt32(leSplit[0]); 
     noGrille = Convert.ToInt32(leSplit[1]); 
    } 

助けてください、... InstanceContextModeはデフォルトでPerSessionに設定されているためです

答えて

1

。言い換えると、クライアントに接続するたびに新しいサービスが作成されるため、オブジェクトは空になります。

簡単な解決策は、InstanceContextModeをSingleに変更することです。これは、プロセス(Webサイト)がリセットされるまで、すべての要求がインスタンスを共有することを意味します。しかし、これは、すべてのクライアントが同じアレイを更新していることを意味します。

データベースなどのデータストアを使用して、ユーザーごとに別々のアレイを格納することにより、ユーザーAはアレイAを更新し、ユーザーBはアレイBを更新します。

+0

あなたは天才です、今はすべて素晴らしいです。私は実際にはすべてのクライアントが同じ配列を更新することを望んでいました。どうもありがとう –

0

これは問題ではありません。ブレークポイントは、別の要求によって開始された別のセッションや別のスレッドでヒットする可能性があります。

関連する問題