繁体   English   中英

WCF服务与WCF服务通信

[英]WCF Service to talk to WCF Service

我有3个项目的解决方案

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

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

因此,这就是我设计它的方式。 项目1包含通过WCF与项目2通信的WCF客户端项目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客户端。 有没有更好的方法来做这一切?

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

是否从项目位置(可能是bin \\ debug文件夹)安装了第2项和第3项(Windows服务)? 如果是这样,我猜你遇到了编译器无法编写.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服务的服务引用(而不是常规程序集引用),就像您设置正确一样。 将服务的安装移动到其他位置,您的无法重建解决方案的问题应该消失。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM