2011-06-14 80 views
0

我在VS2010与3个项目的解决方案:如何在VS2010中为主机和客户端项目维护WCF服务库?

  • WCFServiceLib - 与WCF服务库模板创建一个项目。
  • ServiceHostConsole - 使用控制台应用程序模板创建的项目。
  • ServiceClientConsole - 使用控制台应用程序模板创建的项目。

VS模板在WCFServiceLib中创建了一个app.config,其中包含我想要公开的服务的所有设置。
ServiceHostConsole具有WCFServiceLib作为参考并承载服务,但没有它自己的app.config文件。
如果我尝试运行没有app.config的主机项目,它无法托管服务,所以我将app.config从WCFServiceLib移到了ServiceHostConsole。

ServiceClientConsole具有对WCFServiceLib中的服务的服务引用。但是,一旦我将app.config从Lib项目移动到Host项目,我就不能再更新服务引用或添加添加到lib项目中的新服务。
为了让客户端项目查看服务引用,我必须将app.config移回到lib项目中,对客户端上的服务引用执行更新/添加,然后将app.config移回到主机项目。

请注意,我不能在Service Lib项目和主机项目中保留重复的app.config文件,因为这会导致主机无法启动。无论如何,这将是一个糟糕的解决方案,因为它会在不同的地方创建重复的配置。只改变其中一个可能会产生难以追踪的问题。

这似乎很奇怪,这app.config文件左右移动需要发生,使主机和客户端都工作,并且他们不能同时工作。
我相信这肯定是我设置方式的一个问题(尽管我使用默认模板设置了它们),我想一定有更好的方法来解决这个问题。

这个问题就变得时你都在积极开发服务,并需要不断用更新的服务运行主机和测试客户端,这个问题看标题很讨厌:

你如何保持一个WCF服务VS2010中的库适用于主机和客户端项目?

回答

2

WCF服务库创建一个配置,因为它由名为WcfServiceHost.exe的工具使用。如果您尝试在没有自己的托管应用程序的情况下对其进行测试,并且根据您的描述进行测试,则此工具托管您的服务,并且在客户端中添加服务引用时托管该服务(因为您从移动配置时无法更新引用图书馆)。库中的配置文件永远不会被托管应用程序使用,并且不会与托管应用程序使用的配置冲突。

托管应用程序始终需要自己的配置,并且在主机和库中都有配置应该没有问题。您不应该从库本身创建服务引用。一旦你有自己的主机,当你添加服务引用并仅维护主机中的配置时使用它。

有一个小问题。要添加服务引用,服务必须运行。如果客户端和主机都是同一解决方案的一部分,则必须在不进行调试(或Visual Studio之外)的情况下运行服务,以便能够将服务引用添加到客户端。

+0

运行主机应用程序,然后添加服务引用完美无缺!我想我没有真正理解,当我直接向它添加服务引用时,存在库的自动托管过程。感谢您的解释。 – 2011-06-16 21:12:36

+0

“您必须在不调试的情况下运行该服务”。这是一个很大的帮助。在解决方案属性下,只需将主机设置为唯一要启动的项目,然后按ctrl + f5即可。这将在未经调试的情况下启动主机,并允许您在同一项目中更改客户端 - 允许您添加服务参考。 – Trevor 2013-02-06 09:06:36

相关问题