我有一个WCF服务,通过BL调用数据层,最后调用SQL Server后端。我的服务公开了各种方法/操作,以便从数据库中获取数据。我还构建了一个用于测试的主机和一个Windows服务主机,这就是我计划部署它的方式。
昨天当我进行测试部署时,服务开始正常,但我没有机会查看数据是否正常拉动。事情就是这样:我的部署测试环境(MS Server 2003)与我自己的(笔记本电脑)本地测试环境完全不同。我通过将Windows服务项目的bin \ debug内容复制到服务器上并在使用InstallUtil.exe时引用.exe进行部署。但是,DL的数据连接应该采用不同的连接字符串,因为它应该连接到服务器上的数据库,而不是我的笔记本电脑。然而,我在部署到的目录中看到的唯一app.config是服务主机的app.config。其他项目,如DL和BL,也作为DLL,但没有app.config。那么如何将DL的app.config替换为该enviro的正确版本?我确信这是一个简单的问题,我只是不知道。
一个相关的问题:如果我们稍后决定使用HTTP主机而不是 - 或者除了 - TCP,我可以运行第二个主机驱动同一个服务吗?我是否只需要使用IIS部署主机并将服务节点添加到app.configs?
答案 0 :(得分:1)
部署项目时,您将获得的唯一app.config / web.config是您的可执行项目中的一个(网站/控制台应用程序/ Windows服务/ Windows窗体应用程序/等项目)。任何DLL项目的app.configs都不会被复制到bin目录中。
您需要从DLL项目中复制配置部分,并将它们放入服务项目app.config中。
对于第二个问题,您可以在同一ServiceHost中为同一服务托管不同的端点。您可以在Windows服务/控制台应用程序中托管HTTP端点。如果在IIS之外托管HTTP,则可能需要向用户授予权限以允许其打开HTTP端口。 (见http://msdn.microsoft.com/en-us/library/ms733768.aspx)。对于HTTP,您的生活可能更容易在IIS中托管,但它确实可以在简单的ServiceHost中使用。
<system.serviceModel>
<services>
<service name="MyServiceTypes.MyService">
<endpoint address="http://localhost:44444/MyService"
binding="basicHttpBinding"
contract="MyServiceTypes.IMyService" />
<endpoint address="net.tcp://localhost:55555/MyService"
binding="netTcpBinding"
contract="MyServiceTypes.IMyService" />
</service>
</services>
</system.serviceModel>
答案 1 :(得分:0)
托管环境的App.config(在本例中为托管Windows服务)包含所有模块的配置。同样,如果您在IIS上托管它,Web.config包含所有配置。