WS-Security с использованием файла ASMX в ASP.NET 3.5

В основном мне нужно настроить мой файл ASMX, чтобы, когда я открываю его в браузере для отображения спецификации WebMethod, заголовок Soap соответствовал этому формату:

<soap:Header>
   <wsse:Security>
      <wsse:UsernameToken wsu:Id='SecurityToken-securityToken'>
         <wsse:Username>Username</wsse:Username>
         <wsse:Password>Password</wsse:Password>
         <wsu:Created>Timestamp</wsu:Created>
      </wsse:UsernameToken>
   </wsse:Security>
</soap:Header>

Предыстория: я интегрируюсь с клиентским приложением, которое уже создано (и принадлежит другой компании). По сути, это клиентское приложение уже имеет свои мыльные сообщения, настроенные из его прошлых интеграций с другими компаниями. Поэтому мы решили просто создать веб-службу с использованием файла ASMX, соответствующего WSDL, который они уже настроили для использования.

Можно ли заставить WS-Security работать с файлом ASMX, или ASMX слишком упрощен, и мне нужно перейти на WFC (чего я действительно не хочу делать)?


person Adam    schedule 26.03.2010    source источник


Ответы (3)


Вы можете реализовать сервис SOAP / WS-Security с помощью классических веб-сервисов. Вот руководство от MSDN.

Хотя в WCF все это проще.

РЕДАКТИРОВАТЬ:

Вытащил не ту ссылку. Вот тот, который я хотел вставить (учебник CodeProject, в котором используется WSE 2, хотя WSE 3 - последний выпуск, и я использовал его исключительно до WCF).

person Eric J.    schedule 26.03.2010
comment
@Eric: Я посмотрел на эту ссылку, и это вряд ли учебное пособие. Это просто статья 2002 года. - person John Saunders; 27.03.2010
comment
@ Джон: Ты прав, и ты ошибаешься. Я вытащил неправильную ссылку из своих закладок (обновленный пост). Вы ошибаетесь, заявляя, что устаревший ASMX не может поддерживать WS-Security (см. Обновленную ссылку). - person Eric J.; 27.03.2010

Можно ли заставить WS-Security работать с файлом ASMX, или ASMX слишком упрощен, и мне нужно перейти на WFC (чего я действительно не хочу делать)?

Да, это возможно с помощью веб-служб Улучшения 3 (надстройка для Visual Studio 2005 и ASMX). См. Эту страницу MSDN для ознакомления с руководством по WSE-3 и использования утверждение usernameOverTransportSecurity, отмечая, что это небезопасно, если соединение не происходит через защищенный транспорт (т. е. SSL).

Однако не рекомендуется делать это, и я не могу понять, почему вы не «захотите» «перейти на WCF», если у вас есть выбор. Обратите внимание на следующие очень важные ограничения ASMX / WSE:

  • WSE больше не поддерживаемый продукт. Хотя он по-прежнему работает, он больше не получает обновлений или даже исправлений ошибок.

  • Ни одна версия WSE не будет успешно интегрирована в Visual Studio 2008 или даже в Visual Studio 2005, работающую в Windows Vista x64 или новее.

  • WCF создает множество проблем, чтобы обеспечить потокобезопасные клиентские операции и позволить прокси-серверам существовать в течение длительных периодов времени (что, в свою очередь, обеспечивает значительные преимущества в производительности для каждой операции). Прокси-серверы WSE, с другой стороны, представляют собой одноразовые не защищенные потоками объекты, которые требуют времени настройки при каждом удаленном вызове метода (даже при использовании безопасного разговора). Это также делает их в значительной степени непригодными для внедрения зависимостей и многих других широко используемых шаблонов.

Это лишь некоторые из причин, по которым вам не следует больше использовать WSE. Причины, по которым вам следует использовать WCF на стороне клиента, разнообразны, включая, помимо прочего, разделение модели и прокси, использование служб на основе REST и лучшую обработку. типов коллекций.

Если вы действительно не должны продолжать использовать ASMX, пересмотрите свой отказ от перехода на WCF - если служба не делает много необычных вещей с сериализацией XML, переключение займет не более 5 минут.

person Aaronaught    schedule 27.03.2010
comment
@Aoronaught: Спасибо за всю информацию. Причина, по которой я надеюсь держаться подальше от службы WCF, заключалась в том, что я слышал, что ее легко настроить, но сложно развернуть на сервере. Знаете ли вы, нужны ли дополнительные процедуры настройки для WCF помимо простой команды публикации, которую предоставляет Visual Studio 2008? Мы уже развернули несколько сервисов ASMX, и для развертывания достаточно было нажать кнопку «Опубликовать». Если WCF так же прост, я бы с радостью переключился на него. - person Adam; 29.03.2010
comment
@ Адам: Это должно быть так же просто. Мы не используем команду публикации VS, но наше развертывание обычно представляет собой обычную копию файла. Может быть, кто-то сказал, что развертывать было сложно, потому что .NET 3.5 Framework требует много времени для установки, если на сервере его еще нет? - person Aaronaught; 29.03.2010
comment
Вам также необходимо изучить WCML или более известный как язык разметки конфигурации WCF. Вы проводите часы, тупо глядя на файлы конфигурации с их опциями ga-zillions. Первые несколько дней ничего не работает, а затем по волшебству одна измененная настройка заставляет эту чертову штуку работать. вы помещаете жирные предупреждения в комментарии к файлу конфигурации, чтобы предупредить других НИКОГДА не прикасаться к файлу снова под страхом смерти. В противном случае WCF - пустяк. Действуй. :-) - person Rebecca; 26.05.2010
comment
Я понимаю, что это запоздалый комментарий, но я только что попытался заставить службу WS-security ASMX в стиле WSE работать в WCF, если только я не упустил какой-то трюк - это самая запутанная и сложная из-за ошибок вещь. Настолько, что я сдался, так как нет никаких полезных ошибок, которые помогли бы мне заставить его работать. Очевидно, что всякая помощь приветствуется, так как я бы предпочел ее использовать. Моя самая большая проблема - это отсутствие в сети достойной документации о том, как ее использовать! - person Mark H; 02.06.2010
comment
@harrison: В сети много помощи; попробуйте запустить здесь. Если это не сработает для вас, вы должны начать вопрос, объясняя, что вы пробовали, а что не работает (какую ошибку вы получаете и т. Д.) - person Aaronaught; 02.06.2010
comment
@aaronaught - да, но не многие люди ответили. stackoverflow.com/questions/2945140/ - person Mark H; 02.06.2010
comment
@harrison: Этот вопрос относится к Axis. Это Axis или WSE? Они могут быть похожими, но это не одно и то же. WSDL в этом вопросе, похоже, использует спецификацию WS-Security 2002 года, которая очень старая и, я думаю, соответствует WSE 2.0; WSE 3.0 и WCF вообще не совместимы с этим на уровне проводов. - person Aaronaught; 02.06.2010

Нет, унаследованные веб-службы ASMX не поддерживают WS-Security или какие-либо другие стандарты WS- *.

Поскольку Microsoft теперь считает веб-службы ASMX «устаревшей технологией», вам следует выполнять эту работу с помощью WCF.


Другой ответ предлагает использовать WSE. Это еще менее подходящее решение. WSE полностью устарела и должна использоваться только в крайнем случае.

person John Saunders    schedule 27.03.2010