[英]Windows Service - WCF Service Design
我有一个托管WCF服务的Windows服务,并且可以使用WCFTestClient和自定义客户端成功连接到它。 Windows服务基于以前的exe,但是由于该程序将用于服务器上长时间运行的进程,因此该服务是更好的途径。 问题是我无法从WCF服务访问应用程序中的静态变量。
在.exe(我将其切换为服务器应用程序.dll)中,我使用了一个如下实现的全局类:
public static class Globals
{
....
}
这保留了对程序主要部分的引用,因此,如果任何部分需要引用其他部分,则可以使用语法Globals.JobManager.RunJob()
。
我遇到的问题是WCF服务无法在运行时引用Globals
。 GetJob方法是我需要完成此操作的一个示例:
public class ConsoleConnection : IConsoleConnection
{
public string[] RetrieveJobList()
{
string[] jobs = Globals.JobManager.GetAllJobNames().ToArray();
return jobs;
}
}
在WCFTestClient中进行测试时,此方法返回null,并在创建的客户端中引发异常。
我相信此问题是由Windows服务,WCF服务和应用程序DLL的启动方式引起的。 当前方法是这样的:
public class ETLWindowsService : ServiceBase
{
....
protected override void OnStart(string[] args)
{
if (serviceHost != null)
{
serviceHost.Close();
}
Globals.InitializeGlobals();
serviceHost = new ServiceHost(typeof(ConsoleConnection));
serviceHost.Open();
}
....
}
Windows服务在这里启动,调用创建应用程序所有必需部分的Globals.InitializeGlobals()
,然后启动WCF服务(如果这样做是错误的方式,请告诉我。我去)。 我假设这些操作以错误的顺序执行,这就是问题的原因。
我是否需要Windows服务创建WCF服务,然后依次创建应用程序(这对我来说没有意义),还是我需要Windows服务创建应用程序,然后再创建WCF服务? 还是我缺少第三种选择?
该应用程序位于.dll中,而WCF位于单独的.dll中
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.