使用app.config动态更改Windows服务上的Web服务URL

时间:2018-07-06 18:40:06

标签: c# web-services windows-services app-config

在Windows服务中,我有2个网络参考

我的Windows服务仅包含一个app.config ,不包含一个web.config

我的应用程序配置如下:

    <?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
        <sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >
            <section name="MyFirstWindowsService.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
        </sectionGroup>
    </configSections>
    <startup> 
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.1" />
    </startup>
    <system.serviceModel>
        <bindings />
        <client />
    </system.serviceModel>
    <applicationSettings>
        <MyFirstWindowsService.Properties.Settings>
            <setting name="MyFirstWindowsService_postDataToMapicsWC_XAXSSTRN"
                serializeAs="String">
                <value>http://TESTDEV/web/services/XAXSSTRN.XAXSSTRNHttpSoap11Endpoint/</value>
            </setting>
            <setting name="MyFirstWindowsService_com_goodmanmfg_testdev_GETITMINFO"
                serializeAs="String">
                <value>http://TESTDEV/web/services/GETITMINFO.GETITMINFOHttpSoap11Endpoint/</value>
            </setting>
        </MyFirstWindowsService.Properties.Settings>
    </applicationSettings>
</configuration>

[![在此处输入图片描述] [1]] [1]

问题是我的Web服务当我单击它们时,URL字段仍在显示

“网络参考网址” http://PROD/web/services/XAXSSTRN.XAXSSTRNHttpSoap11Endpoint [![在此处输入图片描述] [2]] [2]

最终目标是什么?将此Windows服务发布到开发人员和产品环境,而无需重建整个解决方案。

理想的行为是:

  1. 在开发人员模式下构建最新代码(对其进行测试,如果所有测试都正确,则进行步骤2)

  2. 提供带有prod网址的app.config文件,以将其放入 文件夹

  3. 发布

    正如您所看到的,我要避免的是需要手动删除文件以更改这两个Web服务,重建解决方案并随后发布...

1 个答案:

答案 0 :(得分:1)

经典ASP.NET应用程序从web.config值的层次结构中获取配置。其他应用程序(控制台应用程序,Windows Forms应用程序,WPF,服务等)从名为[NameOfExe] .exe.config的配置文件(有时也从[NameOfAssembly] .dll.config中获取配置)。该文件位于与exe本身相同的文件夹。

例如,如果您的服务是MyWcfService.exe,则很可能会在同一文件夹(例如,bin / debug文件夹)中找到MyWcfService.exe.config文件。其内容应与您的app.config相同。

Visual Studio通过在源文件夹中创建一个app.config文件,然后在构建时将该文件的内容复制到目录中适当命名的[NameOfExe] .exe.config文件,使所有这些工作都“正常”。与EXE相同的文件夹。

在通常情况下,您可能为开发环境提供一组URL(可能还有其他数据),为QA提供一组URL,为Integration Test提供一组URL,为Prod提供另一组URL。您可以使用configuration transforms来进行管理。

我认为这有助于回答您的问题。总结

  1. App.config文件具有与web.config几乎相同的功能 文件
  2. App.config文件被“编译”为[NameOfExe] .exe.config 文件在生成时放置在EXE的同一文件夹中
  3. 配置转换可以帮助您管理URL

您的另一选择是管理一组[NameOfExe] .exe。[Environment] .config文件,并将它们手动放置在正确的位置。