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

Я работаю над веб-сервисом с Visual Studio, фреймворк 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") возвращает ноль при вызове из тестового приложения. То же самое с WebConfigurationManager.GetSection("jobTypeLists"),

Я также попытался получить доступ к файлу конфигурации с ConfigurationManager.OpenExeConfiguration(AppDomain.CurrentDomain.SetupInformation.ConfigurationFile), но я не могу найти мои разделы в объекте конфигурации, который он возвращает.

Я не уверен, что это что-то значит, но объект конфигурации FilePath свойство содержит "C:\Folder\InnerFolder\WebServiceFolder\web.config.config". Почему этот второй ".config"? Я попытался передать ту же строку в ConfigurationManager.OpenExeConfiguration(), без расширения ".config": он возвратил ноль. (Как и должно быть, я чувствую.)

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

1 ответ

Решение

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

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

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

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

Другие вопросы по тегам