これが私の問題です。私は wcf を使用して単純なクライアント サーバーを実装しています。サーバーは、クライアントから送信された値がグローバル合計に追加される「合計」関数を公開し、この合計はその時点でサーバーに接続されているすべてのクライアントに返されます。これが機能です
public void AddMessage(int num)
{
sum = sum + num;
//Go through the list of connections and call their callback funciton
subscribers.ForEach(delegate(IMessageCallback callback)
{
if (((ICommunicationObject)callback).State == CommunicationState.Opened)
{
Console.WriteLine("Calling OnMessageAdded on callback ({0}).", callback.GetHashCode());
callback.OnMessageAdded(sum, DateTime.Now);
}
else
{
subscribers.Remove(callback);
}
});
}
これは、サーバーが呼び出すコールバック関数です
public void OnMessageAdded(int sum, DateTime timestamp)
{
Console.WriteLine(sum+ ": " + timestamp.ToString("hh:mm:ss"));
}
この部分までは問題ありません。クライアントとサーバーを別のポート (8001) で実行してみました。クライアントは最初にポート 8000 をリッスンしているサーバーに接続し、合計を取得したら、8001 でリッスンしているサーバーを更新します。
これを行うコードは次のとおりです。
//This is the function that the SERVER will call
public void OnMessageAdded(int sum, DateTime timestamp)
{
Console.WriteLine(sum + ": " + timestamp.ToString("hh:mm:ss"));
WCFService.RCRServer.Sum=sum;
Console.WriteLine("8001's sum " + WCFService.RCRServer.Sum);
}
ご覧のとおり、'sum' は RCRServer の静的フィールドです。これが宣言されている方法です。
private static int sum =0;
public static int Sum
{
get { return sum; }
set { sum = value; }
}
この更新も問題ありません。ポート 8000 への接続が失われたときに問題が発生し、ポート 8001 で同じサービスを呼び出そうとしました。このサーバー(8001)の機能では、古い合計が利用可能になります。しかし、0にリセットされ、カウントが再開されます。ここでどこが間違っているのでしょうか。アドバイスをいただければ幸いです。ありがとう。