整数のキューを維持し、WCF呼び出しを介して他のアプリケーションから新しい整数を受け入れる単純なWindowsサービスを作成しようとしています。私の現在の実装は、それと通信するアプリケーションごとに別々のキューを維持しているようですが、これは私が望んでいることではありません。
マイクロソフトの「方法:マネージドWindowsサービスでWCFサービスをホストする」の指示に従うことから始めました。
私のWindowsServiceクラスは次のようになります。
public class MyWindowsService : ServiceBase{
public ServiceHost serviceHost = null;
public MyWindowsService(){
ServiceName = "AdHocReportService";
}
public static void Main(){
ServiceBase.Run(new MyWindowsService());
}
protected override void OnStart(string[] args){
if (serviceHost != null)
serviceHost.Close();
serviceHost = new ServiceHost(typeof(MyService));
serviceHost.Open();
}
protected override void OnStop(){
if (serviceHost != null){
serviceHost.Close();
serviceHost = null;
}
}
}
私のServiceクラスには、キューとAddメソッドがあります。addメソッドは、追加後にキュー内のアイテムの数を返します。コードは次のようになります。
public class MyService : IMyService
{
private Queue<int> myQueue= new Queue<int>();
public int Add(int reportId)
{
myQueue.Enqueue(reportId);
return myQueue.Count;
}
}
最後に、ConsoleAppで次のコードを使用してサービスをテストします。
MyServiceClient client = new MyServiceClient();
int count = client.Add(10);
Console.WriteLine(count); //prints 1
count = client.Add(25);
Console.WriteLine(count); //prints 2
Console.ReadLine();
これにより、最初にテストを実行したときに1と2が出力され、次に3と4が出力され、3番目に5と6が出力されると予想されます。ただし、コンソールアプリがオブジェクト自体をインスタンス化し、Windowsサービス内のオブジェクトを操作していないかのように、毎回1と2を返すだけです。何がわからないの?