【问题标题】:WCF Service to talk to WCF ServiceWCF 服务与 WCF 服务对话
【发布时间】:2013-09-11 21:17:51
【问题描述】:

我有一个包含 3 个项目的解决方案

  1. Winform 客户端
  2. Windows 服务中托管的 WCF 服务
  3. Windows 服务中托管的 WCF 代理

客户端(第 1 项)通过服务(第 2 项)与代理(第 3 项)对话 - 全部使用 WCF。 客户端(第 1 项)通过服务(第 2 项)从 SQL 数据库获取信息 - 使用 WCF。

这就是我的设计方式。 第 1 项包含一个 WCF 客户端,通过 WCF 与第 2 项通信 第 2 项包含 WCF 服务,因此它可以为第 1 项请求提供服务。它还包含一个 WCF 客户端(与 3 对话) 第 3 项包含 WCF 服务,因此它可以为第 2 项请求提供服务。

我在项目 1 的项目中添加对项目 2 的服务引用 我在项目 2 的项目中添加对项目 3 的服务引用

如果一切都在一个解决方案中,应该这样做吗?

因为第 2 项和第 3 项自托管在 2 个 Windows 服务中,所以每次我重新编译我的代码时,我都必须在 Services.MSC 中手动停止第 2 项和第 3 项服务,编译、启动第 1 项和第 2 项服务和最后通过在 Visual Studio 中按 play 来运行我的 Winform 客户端。 有没有更好更简单的方法来完成这一切?

【问题讨论】:

  • I add a service reference to item 2 in item 1's project i add a service reference to item 3 in item 2's project 为什么?您所有的项目都是不同的 Windows 进程,这就是您使用WCF 将它们连接在一起的原因。不需要通过相互添加引用来获得这种依赖关系。
  • 我不明白 - 使用 WCF,您必须将您的 wcf 客户端的引用添加到您的 wcf 服务?
  • 不,你没有。您可以添加Service Reference,而不是Assembly Reference
  • 这就是我所做的 - 添加服务参考

标签: c# performance wcf wcf-data-services wcf-binding


【解决方案1】:

鉴于您的 WCF 服务和您的代理都托管在 Windows 服务中并在某台计算机上运行(我想)。您可以只为 wcf 代理和 wcf 服务使用一个 Windows 服务,您可以只启动和停止一个服务

【讨论】:

  • 这是不可能的 - 所有最终都将托管在不同的机器上
【解决方案2】:

第 2 项和第 3 项(Windows 服务)是否从它们的项目位置(可能是 bin\debug 文件夹)安装?如果是这样,我猜你遇到了编译器无法编写 .exe 文件的问题(因为它正在使用,因为服务正在运行)。

在这种情况下,我建议从不同的位置安装实际的 Windows 服务(例如,C:\WindowsServices\Service1 和 C:\WindowsServices\Service2)。这样,只要您不更改任一服务的代码,您就可以在 Windows 服务运行时编译您的解决方案(包括第 1 项),因为编译器会将 .exe 文件写入项目 bin\debug 文件夹,而不是实际运行服务的文件夹。

这将允许您对 Windows 应用程序进行更改、重新编译和测试。

另一种选择是从您的 Windows 应用程序所在的解决方案中删除(或排除)这两个 Windows 服务。

编辑

如果我理解您的问题,您是在问在同一解决方案中引用 WCF 服务的正确方法是什么?在这种情况下,听起来您已经正确设置了它(尽管有点难以分辨)。

基本上,为了让客户端与 WCF 服务进行通信,您需要对该服务进行引用,以便生成代理。代理是你用来与服务进行实际通信的。

第 1 项将具有对第 2 项(WCF 服务)的服务引用。

第 2 项将具有对第 3 项(另一个 WCF 服务)的服务引用。

第 2 项本身就是 WCF 服务这一事实并不妨碍它成为另一个不同 WCF 服务的客户端。

只要您使用 WCF 服务的服务引用(而不是常规程序集引用),在我看来您设置正确。将服务安装移动到其他位置,您无法重建解决方案的问题应该会消失。

【讨论】:

  • 好的——但我的问题是关于从客户端到服务再到代理的 WCF 绑定——我是在正确地执行此操作还是在相同的解决方案中看到它们是否有一些正确的方法可以通过 WCF 执行此操作——也许我做的对吗?
  • @user1438082 - 查看我的编辑。简而言之,如果我理解您的问题,那么是的,您这样做是正确的。
猜你喜欢
  • 2012-01-14
  • 1970-01-01
  • 1970-01-01
  • 2010-09-25
  • 2011-06-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多