如何访问从另一个应用程序调用的 Web 服务中的 web.config 部分?

How to access web.config sections in a Web service called from another application?

我正在使用 Visual Studio 框架 4.7.1 开发 Web 服务。它的一个 Web 方法需要调用另一个 Web 服务(由另一家公司提供)。它将它接收到的参数(与我们的主要应用程序的业务逻辑一致)转换为其他 Web 服务可以处理的值(根据它自己的业务逻辑)。为此,它在很大程度上依赖于存储在 Web.config 文件中的数据。

我直接测试了它(启动Web 服务并在Web 浏览器页面上使用自动生成的页面调用Web 方法)并且一切正常。

现在,我需要构建一个测试应用程序(也在 Visual Studio,框架 4.7.1 中)以调用相同的 Web 方法。第一次测试时,我注意到 Web 服务试图访问测试应用程序的配置文件而不是它自己的配置文件(如 Can't read Web.config with ConfigurationManager.AppSettings 中所述)。

所以我在 Web.config 中创建了一个 applicationSettings 部分,并将 appSettings 中的所有数据移入其中。它运作良好。

但是,现在我注意到自定义部分也发生了同样的事情。其中一个看起来像这样:

<configSections>
    <section name="jobTypeLists" type="AdelSoft_WS_FRA.JobTypesSection" />
</configSections>


<jobTypeLists>
    <jobTypes>
        <jobType codeCustomerType="A" codeJobType="JobForA" />
        <jobType codeCustomerType="B" codeJobType="JobForB" />
    </jobTypes>
</jobTypeLists>

我可以看到这样的结构如何适合它自己的 .settings 文件,但我有另一个要复杂得多的结构。 (例如,文本节点最多可以有四个祖先。)为了保持简短,我现在不提供它,但可以很容易地安排它。

ConfigurationManager.GetSection("jobTypeLists") returns 从测试应用程序调用时为空。与 WebConfigurationManager.GetSection("jobTypeLists") 相同。

我也尝试过使用 ConfigurationManager.OpenExeConfiguration(AppDomain.CurrentDomain.SetupInformation.ConfigurationFile) 访问配置文件,但我似乎无法在配置对象 returns 中找到我的部分。

我不确定它有什么意义,但是 Configuration 对象的 FilePath 属性 包含 "C:\Folder\InnerFolder\WebServiceFolder\web.config.config"。为什么是第二个“.config”?我尝试将相同的字符串传递给 ConfigurationManager.OpenExeConfiguration(),但没有“.config”扩展名:它返回 null。 (我觉得应该如此。)

Configuration 对象有 10 个部分组和 22 个部分,我无法从中得出正面或反面。同样,我可以列出它们。

实际上,Visual Studio 项目可以通过两种方式引用 Web 服务:作为常规引用(与任何其他项目一样)或作为 Web 引用。

我用的是前者,我的错误就在这里。

为了引用 Web 服务,我启动了它,从它打开的浏览器 window 复制了 URL,并将其粘贴到 "URL" 文本框中19=] window 来自我的测试应用程序。从那时起,它运行良好。

(顺便说一句,我也保留了常规引用,因为我使用 Web 服务中的一些常量来处理 return 值。)