WCF 服务与 WCF 服务通信

本文关键字:WCF 服务 通信 | 更新日期: 2023-09-27 18:31:02

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

  1. 赢形客户端
  2. 在 Windows 服务中承载的 WCF 服务
  3. Windows 服务中承载的 WCF 代理

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

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

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

这是

应该这样做的,因为一切都在一个解决方案中?

由于第 2 项和第 3 项在 2

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

WCF 服务与 WCF 服务通信

假设您的WCF服务和代理都托管在Windows服务中并在某台计算机上运行(我想)。您只能对 wcf 代理和 wcf 服务使用一个 Windows 服务,就像这样,您只能启动和停止一个服务

项 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 服务的服务引用(而不是常规程序集引用),在我看来,您设置正确。 将服务的安装移动到其他位置,无法重新生成解决方案的问题应该会消失。