Как получить доступ к разделам web.config в веб-службе, вызываемой из другого приложения?

Я работаю над веб-службой с Visual Studio, framework 4.7.1. Один из его веб-методов должен вызывать другую веб-службу (предоставляемую другой компанией). Он преобразует полученные им параметры (которые согласуются с бизнес-логикой нашего основного приложения) в значения, которые может обрабатывать другая веб-служба (в соответствии с его собственной бизнес-логикой). Для этого он сильно зависит от данных, хранящихся в файле Web.config.

Я проверил это напрямую (запустил веб-службу и вызвал веб-методы с автоматически сгенерированными страницами на странице веб-браузера), и все работало нормально.

Теперь мне нужно создать тестовое приложение (также в Visual Studio, framework 4.7.1) для вызова тех же веб-методов. При первом тестировании я заметил, что веб-служба пытается получить доступ к файлу конфигурации тестового приложения, а не к своему собственному (как описано в Не удается прочитать Web.config с помощью ConfigurationManager.AppSettings ).

Поэтому я создал раздел applicationSettings в Web.config и переместил в него все данные из 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»: он вернул ноль. (Как и должно быть, я чувствую.)

Объект конфигурации имеет 10 групп разделов и 22 раздела, из которых я не могу понять ни орла, ни решки. Точно так же я могу их перечислить.


person Jean-David Lanz    schedule 25.01.2019    source источник


Ответы (1)


На самом деле проект Visual Studio может ссылаться на веб-службу двумя способами: как обычная ссылка (как и любой другой проект) или как веб-ссылка.

Я использовал первое, и в этом заключалась моя ошибка.

Чтобы сослаться на веб-службу, я запустил ее, скопировал URL-адрес из окна браузера, которое он открыл, и вставил его в текстовое поле «URL» в окне «Добавить веб-ссылку» из моего тестового приложения. С этого момента он работал нормально.

(Кстати, я также сохранил обычную ссылку, потому что использую некоторые константы из веб-службы для обработки возвращаемых значений.)

person Jean-David Lanz    schedule 04.02.2019