针对不同的主机实例和端点分离WCF服务实例?

时间:2013-09-27 12:14:03

标签: c# .net wcf

我有两个使用相同wcf服务实例的应用程序。这两个应用程序将始终成对启动,因此我可以拥有这两个应用程序的第二个,第三个或第四个实例。这是否意味着我需要使用公共端点地址为所有四个实例对提供一个Windows服务,IIS或控制台应用程序来托管一个wcf服务?或者,如果我动态硬编码端点地址,使得每个单独的对在两个应用程序之一中拥有它自己的主机,这是否意味着每个对都可以访问它自己的服务?

我可能可以在台面测试这个,但我认为有经验的人可以节省我相当多的编码时间,只是想弄明白。

更新(为清晰起见):

这个问题的原因是由于我正在处理的特殊情况。场景是这两个应用程序涉及我正在开发的一个客户端exe和我无法控制的第三方exe。我可以开发一个第三方exe可以加载的DLL。在我的第三方应用程序DLL和客户端exe之间,WCF服务旨在桥接进程空间以允许两者传递事务信息。这将允许客户端exe控制第三方exe及其管理的文件。

1 个答案:

答案 0 :(得分:1)

这在一定程度上是一个答案,部分是长篇评论。 :)

考虑WCF服务的一种方法是它在两个单独的应用程序之间来回传递消息。在非常普遍的层面上,虽然有充分的理由来提供有状态的服务,但人们普遍认为最好是无国籍。这意味着每次调用它时都会传递它所需要的所有信息,而服务不需要记住之前的操作。

您担心单独的实例这一事实告诉我您的服务具有状态。我不认为有多种端点可以满足你的需求。

我建议当应用程序“对”启动时,它可以做的第一件事就是从服务请求唯一的ID。从那时起,对服务的所有消息都将包含此ID,服务将相应地处理它们。如果服务应用程序处于维护状态,它将使用此ID作为密钥来标识要访问哪些信息来处理呼叫。

此时,您最终在一台服务器和多个客户端应用程序上使用One Service应用程序,这是大多数WCF系统的设计方式。

更新了,我认为你应该谷歌“WCF:实例管理每个呼叫和每个会话” 您的客户端应该能够从客户端打开连接并保持打开状态。 WCF将为您自动在服务器上创建新实例。这意味着您不需要“应用程序对ID”,但您需要保持会话打开。