WCF与主机的通信

WCF与主机的通信,wcf,windows-services,Wcf,Windows Services,我正在编写一个应用程序,其中一个Windows服务需要与另一个Windows服务通信。“目标”服务将接受来自“源”服务的请求并执行任务。“源”服务不会等待响应,因此请求应该尽快返回 计划是让“目标”服务承载“源”将与之通信的WCF服务。收到请求后,我需要与主机Windows服务进行通信,以通知它执行该工作。我认为“目标”WCF服务将在MSMQ上放置一条消息,“目标”Windows服务将监视该消息。完成此操作后,WCF服务可以返回调用方 这听起来是允许WCF服务通知宿主Windows服务执行任务的

我正在编写一个应用程序,其中一个Windows服务需要与另一个Windows服务通信。“目标”服务将接受来自“源”服务的请求并执行任务。“源”服务不会等待响应,因此请求应该尽快返回

计划是让“目标”服务承载“源”将与之通信的WCF服务。收到请求后,我需要与主机Windows服务进行通信,以通知它执行该工作。我认为“目标”WCF服务将在MSMQ上放置一条消息,“目标”Windows服务将监视该消息。完成此操作后,WCF服务可以返回调用方

这听起来是允许WCF服务通知宿主Windows服务执行任务的合理方法吗

问候


迈克尔是的,这是一个很好的方法。MSMQ非常适合此任务-源服务可以通过WCF将消息放入队列,从而向目标发送请求。MSMQ在您希望向服务发送请求以进行异步处理的任何时候都很好,特别是在您不需要返回响应的情况下。如果确实需要响应,也可以将源设置为WCF服务,如果需要,目标可以发回消息。有几种不同的方法可以通过MSMQ绑定实现这一点。

请允许我不同意。简单地根据您所描述的,使用MSMQ在“目标”WCF服务和托管Windows服务之间进行通信对我来说似乎非常重要。MSMQ允许不同进程以故障保护方式进行通信。在您的情况下,WCF服务与Windows服务位于同一进程中。因此,虽然MSMQ作为两者之间的通信机制可以工作,但它不是必需的

此外,如果两个WCF服务不总是同时运行,则在“目标”WCF服务和“源”WCF服务之间使用MSMQ绑定是有意义的。例如,如果“目标”WCF服务不总是在运行,MSMQ绑定将允许“源”WCF服务仍然发送任务。这些任务将存储在MSMQ中,以便在“目标”WCF服务开始运行时检索。但是,听起来这两个服务都将运行,所以我看不出有必要使用MSMQ绑定

有关选择WCF绑定的信息,请参阅本文

让我谈谈另一件事。当您的“目标”WCF服务收到来自“源”的任务请求时,简单地将任务传回Windows服务本身不会做任何事情。Windows服务正在运行,是的,但它没有可以利用的执行线程。关键是为了使任务处理异步化,您需要启动一个线程来管理任务。我建议利用
ThreadPool
来实现这一点

希望这有帮助。

@Matt

谢谢你的帮助

在仔细考虑之后,看看您的方法如何使事情更易于设置和使用。我需要让“目标”服务将工作结果发送回“源”,因此我可能会使用nettcp并使用回调。然后,计划是设置一个新线程,完成工作,并在完成后将响应发送回“源”

@安迪

谢谢你的帮助


我查看了msmq,但考虑到收到消息后可能需要设置一个新线程,我还是让web服务来完成这项工作。

那么您是否希望WCF服务使用msmq绑定并让它执行实际任务,而不是,使用TcpBinding WCF服务将消息放入队列,并让Win服务监视队列,然后执行此工作?您可以不使用TcpBinding来完成此工作,您所需要的只是源和目标windows服务。我只需要在客户端(源)和服务器端(目标)使用MSMQ绑定。目标可以是承载具有MSMQ端点的WCF服务主机的windows服务。源端将具有连接到目标端点的WCF MSMQ客户端绑定。源通过WCF MSMQ发送消息,目标将自动拾取该消息,此时您可以直接在目标服务中处理该消息。