2011-07-28 65 views
1

我有运行IIS 7.5的Windows 2008 R2服务器。目前,我使用WCF向外部公开接口,然后代码从我的DLL调用例程。创建和使用C#Windows服务

我想离开这个直接访问并在C#中创建一些可以在后台运行的守护进程。我将使用守护进程来监视线程,接受请求并平衡性能。我打算允许守护进程完全访问我的主应用程序的DLL,然后在接收到WCF服务时将WCF服务传递给守护进程。

我看了一下互联网,发现了一些关于创建Windows服务,构建安装程序和注册服务的例子;但是,我似乎无法找到任何有关如何通过不同的应用程序与运行服务进行交互的文档。

这里有或多或少的什么,我希望做一个例子:

比方说,我已经建立并安装所描绘的示例服务在这里:http://blogs.msdn.com/b/bclteam/archive/2005/03/15/396428.aspx

现在,一个客户告诉我,我需要扩展它以允许作业按需运行。我已经建立了允许我这样做的必要功能,但是现在我面临着如何与当前正在运行的服务通话以告诉它开始处理的问题。我该怎么做呢?您是否有描述此IPC的示例链接?

谢谢!

+0

你是说你要运行WCF服务的托管Windows服务这样的自我? http://stackoverflow.com/questions/3206132/windows-service-self-hosted-wcf-compression – Kane

+0

不,我只是说WCF只是提供一个接口到服务。 WCF将成为访问该服务的众多方式之一。 –

+0

请参阅下面的答案。在以前的公司中,我们使用.NET Remoting和MessageQueue与Windows服务进行通信,从调用应用程序的队列中消息和Windows服务正在侦听该队列并处理传入的消息。要在现在正在设计的新应用程序中执行相同的操作,我们将使用TIBCO EMS队列。 –

回答

1

您可以发送自定义命令的Windows服务,但这些都只是整数值:

protected override void OnCustomCommand(int command) 

更好的解决方案是在“命名管道”与Windows服务进行通信。实现这个最好的方法是恕我直言,用NetNamedPipe绑定创建一个WCF服务,并将它托管在Windows服务本身中。

+0

我喜欢这里的命名管道建议...看起来像最好的方式。 –

1

您可以使用WCF与您的Windows服务进行通信。

其实让我们说你有一些API类库,你想使可用作为网络上的一个daemom,这台机器上,无需用户登录...

你可以有一个WCF最终它将API暴露给调用者,并在IIS或Windows服务中托管此服务,唯一的区别是您托管WCF的方式(IIS使用.svc文件为您提供服务,Windows服务需要一点时间的代码来启动WCF主机对象);在此之后,几乎所有东西都保持不变。

0

没有什么神奇的一种服务,它只是在由系统代替用户运行启动启动程序。你需要为你的服务编写某种形式的IPC(不管是配置文件还是更高级的东西,比如从一个目录加载所有dll并将一个已知函数调用为入口点(这将是插件模型))。

你需要写你原有的服务以某种形式听取您提供所需的funcationality

0

IPC可以用不同的方法来实现:

0

因此,您需要一个Windows服务来执行一些预定的操作,并且还可以通过WCF侦听请求以执行按需操作,我是否明白这一点?

这里是一个MSDN文档解释了如何创建一个实现了WCF服务窗口服务: http://msdn.microsoft.com/en-us/library/ms733069.aspx