#c# #web-services #web-config #asmx #soap-extension
#c# #веб-сервисы #web-config #asmx #soap-расширение
Вопрос:
Мне нужно использовать SoapExtension
подкласс (который я создал), но, похоже, этот класс может быть инициализирован только через web.config
файл. Я читал, что это должно быть возможно через app.config
file, но я не знаю, как это сделать таким образом.
Проблема: у меня нет web.config
файла в моем проекте.
Итак, я создал его вручную со следующим содержимым:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<system.web>
<webServices>
<soapExtensionTypes>
<add type="MyNameSpace.MySoapExtension,MyAssemblyFileName" priority="1"/>
</soapExtensionTypes>
</webServices>
</system.web>
</configuration>
Несмотря на точки останова, отправляемые в каждом методе SoapExtension, во время выполнения ничего не происходит, кажется, что он никогда не инициализируется и не вызывается. Мой SoapService инициализируется нормально, но без какого-либо расширения.
Я предполагаю, что создания файла web.config вручную может быть недостаточно, чтобы его можно было учесть, поэтому мне интересно, как правильно настроить мое приложение на наличие файла web.config для использования моего SoapExtension. Он должен пойти и инициализировать мой класс, ProcessMessage и содержимое ChainStream.
Примечание: Это моя первая реализация SoapExtension, поэтому я не совсем уверен в том, что я делаю.
Ответ №1:
Я узнал, как / куда вставить web.config
содержимое в файл app.config:
Мне пришлось вставить его после элементов ApplicationSettings
и userSettings
. Это единственное место, где он не генерирует никаких ошибок во время выполнения. Поэтому файл web.config не нужен, хотя я все еще хотел бы знать, как настроить приложение, если у кого-нибудь есть ответ.
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<configSections>
</configSections>
<applicationSettings>
</applicationSettings>
<userSettings>
</userSettings>
<system.web>
<webServices>
<soapExtensionTypes>
<add type="MyNameSpace.MySoapExtension,MyAssemblyFileName" priority="1"/>
</soapExtensionTypes>
</webServices>
</system.web>
<system.serviceModel>
<bindings />
<client />
</system.serviceModel>
</configuration>
Кажется, что теперь мой SoapExtension правильно инициализирован, и фильтрация сообщений работает нормально.
Ответ №2:
В связи с комментарием @soleshoe я не смог заставить работать мои модульные тесты (xUnit), в итоге мой App.config выглядел так.
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<configSections>
</configSections>
<system.web>
<webServices>
<soapExtensionTypes>
<add type="System.Common.SOAPExtensions.TraceExtension, System.Common" priority="1"/>
</soapExtensionTypes>
</webServices>
</system.web>
</configuration>