2011-04-20 84 views
3

我正在尝试创建一个WCF服务,该服务托管在一个Windows服务中。这个Windows服务将被部署在多台机器上(根据负载情况,可变数量的机器)。将有一个业务层将排队“工作”,并将每个工作传递给这些窗口服务之一,具体取决于哪一个是免费的。C#Windows服务在多台机器上运行?

我对如何实现这一点感到困惑。我可以编写WCF并托管Windows服务,将它们安装到我需要的任何机器上。然后,从将发送作业到这些服务的层,我以某种方式告诉它要发送到哪台机器(通过WCF服务接口)。这是我对如何去做最困惑的一点。

回答

4

我已经完成了这个确切的事情。你所描述的是正确的(尽管在分布式环境中保持节点同步并且不允许它们相互踩在一起可能很粗糙)。为了查找端点,我建议使用WS-Discovery,如http://msdn.microsoft.com/en-us/library/ee354381.aspx所述。如果你不使用.NET4,你仍然可以使用服务或端点行为来实现发现。

+0

感谢您的回复,并且所有人都会照办。我用DCOM和C++做了很多这类事情,但这是我第一次尝试.NET和WCF。从阅读中,我可以看到您创建了一个WCF服务,然后为它创建一个主机。但似乎主机不必驻留在同一台机器上。这是真的?我一直在想,我创建了一个WCF服务和一个主机,并且它是驻留在每台机器上的主机和WCF服务,然后我的客户机通过在其servicehost构造函数中指定机器(或任何没有我返回的机器)到我的笔记)。 – Jonnster 2011-04-21 08:09:34

+0

不,主机和WCF服务必须在同一台机器上运行。将主机想象成main()方法,将WCF服务看作是在主方法中运行的一组对象。 – NateTheGreat 2011-04-21 12:17:16

+0

谢谢。这是我的想法,但我在网上阅读了一些不同的建议。这对我来说没有任何意义,所以感谢您澄清这一点。 – Jonnster 2011-04-21 15:06:44

1

您正在谈论一个NLB解决方案。

+0

+1。这是动态NLB群集的典型问题。只需在中央节点上安装NLB软件(有几个选项可供选择)。每次添加或删除节点时,您的“业务层”都必须重新配置NLB群集。 – 2011-04-21 02:55:16

2

与其他WCF服务一样,您的服务将公开端点。客户只需像往常一样发送到这些终端。

也许你不熟悉代理构造函数的重载?有一些接受端点地址,允许客户端选择使用哪个服务端点。

相关问题