我有三个项目的解决方案
客户端(项目1)通过服务(第2项)与代理(第3项)交谈--所有这些都使用WCF。客户端(项目1)通过服务(项目2)从SQL数据库获取信息--使用WCF。
所以我就是这样设计的。项目1包含一个WCF客户端,可以通过WCF项目2与第2项对话,而WCF项目2包含一个WCF服务,因此它可以为项目1请求提供服务。它还包含一个WCF客户端(与3对话),第3项包含一个WCF服务,因此它可以为第2项请求提供服务。
我在第1项的项目中添加了对第2项的服务引用,在第2项的项目中添加了对第3项的服务引用。
是否应该这样做,使一切都在一个解决方案中?
因为第2项和第3项是自托管在2个窗口服务中,所以每次我重新编译我的代码时,我必须在Services.MSC中手动停止第2项和第3项服务,编译、启动第1项和第2项服务,最后通过在visual studio中按play来运行Winform客户端。有更好的方法来做这一切吗?
发布于 2013-09-11 21:37:26
考虑到您的WCF服务和代理都托管在windows服务中,并且运行在某些计算机上(我想),.You只能为wcf代理和wcf服务使用一个windows服务,您只能启动和停止一个服务。
发布于 2013-09-12 04:02:19
项目2和3( Windows服务)是否从其项目位置(可能是bin\debug文件夹)安装?如果是这样的话,我猜您遇到了一个问题,编译器无法编写.exe文件(因为它正在使用,因为服务正在运行)。
在本例中,我建议从不同的位置安装实际的windows服务(例如,C:\WindowsServices\Service1和C:\WindowsServices\Service2)。这样,只要您不对两个服务的代码进行更改,就可以在运行Windows服务时编译解决方案(其中包括项目1),因为编译器将将.exe文件写入项目bin\debug文件夹,而不是实际运行服务的文件夹。
这将允许您对windows应用程序进行更改、重新编译和测试。
另一种选择是从windows应用程序所在的解决方案中删除(或排除)这两个windows服务。
编辑
如果我理解您的问题,那么当WCF服务处于相同的解决方案中时,您会问引用WCF服务的正确方法是什么?在这种情况下,听起来它的设置是正确的(虽然有点难以分辨)。
基本上,客户端要与WCF服务通信,就需要有对该服务的引用,这样才能生成代理。代理是您实际用于与服务通信的内容。
项目1将有对项目2( WCF服务)的服务引用。
项目2将有一个服务参考项3(另一个WCF服务)。
项目2本身就是WCF服务这一事实并不妨碍它成为另一个不同的WCF服务的客户端。
只要您为WCF服务使用服务引用(与常规程序集引用相反),在我看来,您的设置是正确的。将服务的安装移到不同的位置,您无法重新构建解决方案的问题应该消失。
https://stackoverflow.com/questions/18751446
复制相似问题