【问题标题】:Separate WCF Service Instance For Different Host Instance and Endpoint?为不同的主机实例和端点分离 WCF 服务实例?
【发布时间】:2013-09-27 12:14:02
【问题描述】:

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

我可能可以在台式机上对此进行测试,但我认为有经验的人可以为我节省大量的编码时间来尝试解决这个问题。

更新(为清楚起见):

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

【问题讨论】:

  • 如果没有更完整的描述,很难回答,(服务是否仅用于在两个应用程序之间进行通信,服务是否有状态?这是一个有很多客户端的应用服务器吗?我们在谈论双工通道吗? ) 但我想知道您是否不能共享相同的服务/端点并让它传递具有关联应用程序对 id 的消息,以便服务可以适当地路由它们?
  • 我基本上是在学习 WCF 概念时应用的,所以不确定服务状态是什么意思。是的。它用于在两个应用程序之间传递信息。它确实使用双工通道,因为要实现这一点。它基本上是一个应用程序使用服务来管理另一个应用程序中的事务。
  • 现在我确实有一个由第三个主机应用程序托管的集中式服务。它工作得很好,但后来我想知道是否最好成对管理这两个,而不是对任意数量的对进行集中式服务。这引发了一个问题,如果我在一个应用程序中自行托管并使用单独的端点(地址是动态的,但只能在每对的两个应用程序之间理解),是否会为每对创建一个单独的服务实例?还是我误解了服务实例是如何创建的?
  • 建议您在问题正文中发表澄清。
  • 服务生命周期(会话)和端点是单独的问题。有状态服务是在调用之间“记住”信息的服务。

标签: c# .net wcf


【解决方案1】:

这部分是答案,部分是长评论。 :)

考虑 WCF 服务的一种方式是它在两个独立的应用程序之间来回传递消息。在非常普遍的层面上,尽管有很多充分的理由来提供有状态服务,但普遍认为最好是无状态的。这意味着每次您调用它时,您都会传递它执行任务所需的所有信息,并且该服务不需要记住之前完成的操作。

您担心单独的实例这一事实向我表明您的服务具有状态。我不认为多个端点适合您的情况。

我建议当应用程序“对”启动时,它可以做的第一件事是从服务请求一个唯一 ID。从那时起,发送到服务的所有消息都将包含此 ID,并且服务将相应地处理它们。如果服务应用程序正在维护状态,它将使用此 ID 作为键来识别要访问哪些信息来处理调用。

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

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

【讨论】:

  • 好的,现在就是这样设计的。我基本上创建了一个唯一但通用的 ID 对象,它使用 Guid 来生成实际的 ID 值。然后我有一个服务应用程序和服务器应用程序。今天早上,我重新审视了它的设计,并想知道通过在每个应用程序“对”具有唯一端点地址的客户端应用程序之一中自托管,我正在做的事情是否会更好。当时的想法是,这可能会减少使用 ID 的需要,但我不确定这是否可能或已实践。听起来我只需要坚持我所拥有的。
  • 顺便说一句...我非常感谢您的洞察力。作为 WCF 的新手,质疑最佳实践和它的工作原理一样容易。出于好奇,是否可以使用只有应用程序“对”才知道的更动态的端点地址来自托管服务的单独实例?这将使其成为无状态的,而正如您所解释的那样,它是有状态的,因此它可以跟踪谁在与谁通信。
  • 我不明白您为什么需要一对应用程序,为什么需要多个 WCF 应用程序,在我看来,您走错了路。您是说每个单独的 wcf 应用程序的应用程序逻辑会有所不同吗?更新我的答案以处理会话。
  • 我别无选择。这两个应用程序之一是我无法控制的第三方 exe。但是,我可以开发第三方应用程序能够加载的 dll。 WCF 服务允许我从另一个外部应用程序控制和管理第三方应用程序(及其管理的文件),因此是应用程序“配对”(加载在第三方应用程序中的 dll 和客户端 exe)。为了清楚起见,我会更新问题,但一开始没有把它放在那里,因为我害怕混淆问题。
  • 其实现在说得通了
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-09-17
  • 2010-12-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多