【问题标题】:dynamically change web service url on a windows service using app.config使用 app.config 动态更改 Windows 服务上的 Web 服务 URL
【发布时间】:2018-12-15 09:33:46
【问题描述】:

在我的 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]

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

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

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

理想的行为是:

  1. 在开发模式下构建最新代码(测试它,如果所有测试都很好,则第 2 步)

  2. 提供一个带有 prod url 的 app.config 文件以放入 文件夹

  3. 发布

    如您所见,我试图避免的是手动删除文件更改这 2 个 Web 服务、重建解决方案然后发布...

【问题讨论】:

  • 我个人使用本地文本文件和我的 Web 服务的路径,并使用文本文件中的值手动对端点进行编码。很简单。您只需要添加一次网络参考,至少在您使用它时拥有智能。交换时,我在网络服务器上只有 2 台主机并更新了一台并交换了该路径上的每个人。下次我这样做时,我会更新另一个 web 文件夹并交换每个人的位置

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


【解决方案1】:

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

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

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

在正常情况下,您的开发环境可能有一组 URL(可能还有其他数据),另一组用于 QA,另一组用于集成测试,另一组用于生产。您可以通过使用configuration transforms 来管理它。

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

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

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

【讨论】:

  • 你好 flydog57 感谢您的回答。我有几个问题...在我的 app.config 中,当我更改引用时,它们不会在我的 Web 引用中发生更改,我猜这是预期的但是当我更改我的 Web 引用并重建项目时,我的 app.config也没有得到更新,这也是意料之中的吗???我也尝试按照您的建议删除文件(nameofEXe].exe,但我也没有运气。
  • 回到我构建 Windows 服务时,我发现它指向 obj/debug/myFirstWindowsService.exe 但在这个文件夹中我没有​​任何 file.exe.config。我已经更改了其他文件夹中的这些文件,但这似乎也没有做任何事情。你知道为什么会这样吗?
  • 当您向项目添加“Web 引用”时,您是在告诉 VS“转到此 URL,从 Web 服务中下拉元数据,并为我构建代理”。在您“更新”网络参考之前,代理将保持不变。 Web 引用与您指向 Web 服务的位置之间没有自然链接(您可以添加本地 Web 引用,但指向使用相同 WSDL 的远程 Web 服务)。 app.config URL 是您实际要访问的 URL,而不是您从中提取元数据的位置。您可以直接修改这些 URL,也可以使用 WCF 配置工具。
  • 至于为什么 app.config 文件的行为不正常...您是通过添加配置文件还是通过其他方式将其添加到项目中。我不确定神奇的“复制 app.config 将其重命名为 myexe.exe.config”逻辑在哪里(我之前随便看过,但从未找到它,也从未深入挖掘过)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多