0

我正在使用 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")从测试应用程序调用时返回 null。与 相同WebConfigurationManager.GetSection("jobTypeLists")

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

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

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

4

1 回答 1

0

实际上,Visual Studio 项目有两种方法可以引用 Web 服务:作为常规引用(就像您对任何其他项目一样)或作为 Web 引用。

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

为了引用 Web 服务,我启动它,从它打开的浏览器窗口中复制 URL,然后将其粘贴到我的测试应用程序中“添加 Web 引用”窗口中的“URL”文本框中。从那里开始,它工作得很好。

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

于 2019-02-04T09:32:37.467 回答