Использование веб-службы SOAP 1.1, отличной от asmx, на C# с защитой заголовков

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

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

Мне нужно написать программу C# .NET 3.5 для использования веб-службы, разработанной на Java. У меня есть практика использования веб-сервисов ASMX в .NET с использованием веб-ссылок из моего опыта написания плагинов и программного обеспечения Dynamics CRM, но это поставило меня в тупик.

Моя первая попытка состояла в том, чтобы использовать веб-ссылку (да, я знаю, а не WCF), однако для веб-службы требуется PasswordDigest (SHA-1 с одноразовым номером и созданным), токен имени пользователя и токен метки времени в заголовке SOAP, и я не мог найдите способ добавить их в заголовок SOAP с помощью веб-справочника.

Моя вторая попытка состояла в том, чтобы использовать Service Reference (я полагаю, но я, вероятно, ошибаюсь, ха-ха, что это является WCF), однако у меня нет большой практики с этим, и все учебные пособия, которые я нашел в Интернете, не были много помощи.

Каждый раз, когда я пытаюсь использовать WS, я получаю отказ от сервера из-за невозможности аутентификации.

Мой вопрос: как мне использовать веб-службу с этими требованиями в С# .NET 3.5?

Спасибо.


person jacobappleton    schedule 30.09.2011    source источник
comment
Чтобы создать прокси, откройте диалоговое окно «Добавить ссылку на сервис» и введите URL-адрес сервиса, добавив в конце ?wsdl.   -  person Artem Koshelev    schedule 30.09.2011
comment
После создания прокси-сервера с помощью диалогового окна «Добавить веб-ссылку» или wsdl.exe вы можете переопределить методы GetWebRequest и GetWebResponse, чтобы работать с заголовками, отправляемыми на сервер.   -  person L.B    schedule 30.09.2011


Ответы (1)


IIRC, Microsoft WSE (либо 2.0, либо 3.0) имеет что-то под названием UsernameToken, которое вам нужно вставить куда-нибудь в исходящее сообщение SOAP, и все готово. Конечно, этот ответ оставляет желать лучшего, поэтому я дам вам пару ссылок и надеюсь, что вы справитесь:

http://www.codeproject.com/KB/webservices/WS-Security.aspx

http://www.reliablesoftware.com/articles/WSESecurity.html

http://www.devx.com/security/Article/15634

(И все это еще раз показывает, насколько на самом деле несовершенны SOAP и WSDL).

person Anton Gogolev    schedule 30.09.2011
comment
В итоге я сбросил свою версию .NET обратно на 2.0, установил WSE 3.0 и следовал инструкциям в вашей третьей ссылке, чтобы заставить это работать. Большое тебе спасибо! В качестве меры любопытства, вызвана ли вся эта проблема Microsoft или протоколом SOAP/WSDL и почему? Кажется странным, что я не мог справиться с этим с помощью обычных .NET-библиотек и вместо этого должен был вернуться к устаревшим библиотекам... - person jacobappleton; 03.10.2011
comment
Насколько я знаю, WSDL просто не содержит достаточно информации о том, как именно защитить веб-службу. Никогда в моем опыте у меня не было более или менее реального веб-сервиса (читай: созданного каким-то придурком, который думал, что если стандарты WS-* существуют, все они должны использоваться многими странными способами), который просто работал бы при добавлении ссылка на - person Anton Gogolev; 03.10.2011
comment
Ха-ха, да, кажется, слишком много тех придурков, которые используют эти штуки только потому, что могут. Еще раз спасибо за вашу помощь! - person jacobappleton; 03.10.2011
comment
@AntonGogolev Я задаю аналогичный вопрос, не могли бы вы проверить его здесь: заголовок stackoverflow.com/questions/13266468/ - person Saeid; 07.11.2012