我正在尝试制作一个简单的 Windows 服务,该服务维护一个整数队列并通过 WCF 调用从其他应用程序接受新整数。我当前的实现似乎为与之通信的每个应用程序维护单独的队列,这不是我想要的。
我首先按照 Microsoft 关于如何:在托管 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,然后第三次打印 5 和 6,依此类推。但是,它每次只是简单地返回 1 和 2,就好像控制台应用程序正在实例化对象本身而不是在 Windows 服务内对对象进行操作一样。我不明白什么?