0

我有 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 中按下播放来 Winform 客户端。有没有更好更简单的方法来完成这一切?

4

2 回答 2

1

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

于 2013-09-12T04:02:19.767 回答
1

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

于 2013-09-11T21:37:26.823 回答