.net windows服务作为状态服务器
我想创建一个可以通过WCF从Web应用程序访问的Windows服务。 工作流程将为:.net windows服务作为状态服务器
- Windows服务启动并将在内存中保存默认值。
Web应用程序将通过wcf连接Windows服务并获取该值,并在一些处理后将该值设置回内存中。
在同时将happend一样点2,等等,等等
此值将仅保持在存储器中。
重点是我不知道把变量,将保存在Windows服务的内存中。有一个服务类,它是一个程序类instancied这是静态类。那么,只要服务正在运行,最好放置一个变量的最佳位置就是保存在内存中。
第二个问题,在DLL中引用windows服务的exe是否正确?
每个windows服务都有一个服务类,它也包含启动和停止方法。但是,对于您的服务,我只需创建一个可从处理WCF客户端请求的类访问的单例类。
没有必要引用服务的exe(我强烈建议你不要这样做),因为当你使用WCF时,你会在你的客户端项目中插入一个服务引用,只需要两种方法获取并设置数据。
我建议:设计服务的操作和数据合同,然后在客户端项目中创建服务引用。这会让事情变得清楚。
如果您不知道我在说什么,我建议您使用WCF样本进行googleing。
编辑
您在您创建的服务类与私人领域的评论写道。我想你实际上并没有按照我的建议去做:-)我说:创建一个单独的类,它被处理get/set请求的类访问。
public class ValueHolder
{
private static ValueHolder m_singleton = null;
private int m_someValue;
private ValueHolder()
{
m_someValue = 0;
}
public static ValueHolder Instance
{
get
{
if (m_singleton = null)
m_singleton = new ValueHolder();
return m_singleton;
}
}
public int SomeValue
{
get { return m_someValue; }
set { m_someValue = value; }
}
}
所以现在你有一个窗口服务类,你用来托管一个WCF服务。 WCF服务包含从ValueHolder.Instance.SomeValue
获取/设置值的方法。这些方法暴露给使用数据合同的客户端。
启动您的服务和使用Visual Studio中的各个选项添加服务参考客户端(不对DLL的引用,但服务引用 !!)。客户端现在访问服务的get/set方法。
工作完成,我的钱在哪里? :-D
它几乎听起来像一个单独的服务可能是一点点矫枉过正 - 你可能应该看看进程间共享内存。
看看这篇文章#3。
我认为客户端应该是一个web应用程序,这使得进程共享内存很难使用:-) – 2009-11-09 10:05:27
你好,我喜欢你说的,但它不工作。我创建了一个带有set和get方法的Service类以及一个默认值为5的私有字段。该类由Windows服务引用。我跑了服务。 然后,从单元测试类中调用get方法并获得默认值5,然后使用参数9调用Set方法,然后再次调用Get方法。该方法再次返回5值,而不是预期的9。 – user137348 2009-11-09 10:32:35
发表一些代码。没有代码就无法辨别。 – 2009-11-09 10:54:12
只是伟大的,它的作品完美!你的帐号是多少? :-) 更进一步,获得单身人士的工厂方法不是更好吗? – user137348 2009-11-09 12:59:51