.net windows服务作为状态服务器

问题描述:

我想创建一个可以通过WCF从Web应用程序访问的Windows服务。 工作流程将为:.net windows服务作为状态服务器

  1. Windows服务启动并将在内存中保存默认值。
  2. Web应用程序将通过wcf连接Windows服务并获取该值,并在一些处理后将该值设置回内存中。

  3. 在同时将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

+0

你好,我喜欢你说的,但它不工作。我创建了一个带有set和get方法的Service类以及一个默认值为5的私有字段。该类由Windows服务引用。我跑了服务。 然后,从单元测试类中调用get方法并获得默认值5,然后使用参数9调用Set方法,然后再次调用Get方法。该方法再次返回5值,而不是预期的9。 – user137348 2009-11-09 10:32:35

+0

发表一些代码。没有代码就无法辨别。 – 2009-11-09 10:54:12

+0

只是伟大的,它的作品完美!你的帐号是多少? :-) 更进一步,获得单身人士的工厂方法不是更好吗? – user137348 2009-11-09 12:59:51

它几乎听起来像一个单独的服务可能是一点点矫枉过正 - 你可能应该看看进程间共享内存。

看看这篇文章#3。

http://www.codeproject.com/KB/threads/csthreadmsg.aspx

+0

我认为客户端应该是一个web应用程序,这使得进程共享内存很难使用:-) – 2009-11-09 10:05:27