0 / 0 / 0
Регистрация: 08.12.2015
Сообщений: 26
|
|||||||||||||||||||||
1 | |||||||||||||||||||||
Веб-Сервис asmx. Изменение схемы ответа от сервиса08.12.2015, 12:31. Показов 2821. Ответов 13
Метки нет (Все метки)
Добрый день!
Сейчас пищу веб-сервис asmx. Генерировал классы по заданной схеме wsdl. Столкнулся вот с какой проблемой. После генерации классов и методов, на сервисе была создана операция. Она возвращает вот такой ответ :
а требуется сделать вот так :
Копал в сторону wsdl схемы, по которой генерировался сервис, но с ней вроде бы все в порядке. Описание к методу вот такое :
0
|
08.12.2015, 12:31 | |
Ответы с готовыми решениями:
13
Отправка массива байтов из веб-сервиса asmx Взаимодействие веб-сервиса asmx и SQL Server 2005 Поднять asmx-сервер и клиентом на C++ достучаться до методов сервака (как добавить ссылку на веб-сервис?) Как добавить хэш-код в тело ответа веб-сервиса? |
2735 / 2041 / 380
Регистрация: 22.07.2011
Сообщений: 7,731
|
|
09.12.2015, 02:17 | 2 |
Так по сути эти два варианта эквивалентны , и там и тут одно и тоже пространство имен , смущает что во втором случае через префикс ? - это всего лишь один из вариантов оформления документации , не более , на функционал она никак не влияет , можете написать свой wsdl генератор , или - в простом случае просто выгрузить заранее подготовленный wsdl на запрос ?wsdl/
Вообще , сама wsdl схема поддерживает разные навороченные конструкции , которые можно в произвольном виде писать , не влияя при этом на суть происходящего , и добиться аналогов от wsdl генератора через метаданные , во многих случаях невозможно.
0
|
0 / 0 / 0
Регистрация: 08.12.2015
Сообщений: 26
|
|
09.12.2015, 13:05 [ТС] | 3 |
Насколько я понял, приведенные ответы от сервиса эквивалентны? Но если вдруг разработчики принимающей части настоят на том чтобы ответ на запрос приходил символ в символ как у них, что я могу сделать?
Сам ответ генерирует asmx сервис. Я же не смогу менять его вид? Может попробовать перехватить ответ и тупо в нём заменить шапку и добавить к тегам префиксы? Если такое возможно, то прошу подсказать каким событием его можно отловить? Заранее спасибо за ответ!
0
|
2735 / 2041 / 380
Регистрация: 22.07.2011
Сообщений: 7,731
|
|
09.12.2015, 16:34 | 4 |
https://msdn.microsoft.com/en-... s.90).aspx
и , если будете писать вручную - http://www.w3.org/TR/wsdl
0
|
0 / 0 / 0
Регистрация: 08.12.2015
Сообщений: 26
|
|
09.12.2015, 17:39 [ТС] | 5 |
Пока не разобрался как поменять WSDL. Видимо я как то не так сам сервис создал ... Не могу найти где находится : On an ASP.NET application, select a Web service provider endpoint.
Есть сам солюшн, в нём 1 проэкт, в нём несколько классов и asmx файл. Где мне найти Web service provider endpoint я не могу понять ... Я в этом пока ещё новичок. Хотя вот в чем вопрос. Я создавал этот сервис, сгенерировав его из wsdl файла. Поможет ли замена? (даже если я найду где его поменять ) Схема то у меня сходится, не сходится формат выходного сообщения. Или при замене wsdl формат тоже поменяться?
0
|
2735 / 2041 / 380
Регистрация: 22.07.2011
Сообщений: 7,731
|
|
09.12.2015, 17:43 | 6 |
Вы уж определитесь где не сходится , в шапке темы Вы про несовпадение схем писали , а теперь выходит , что со схемами все в порядке ) , выходное сообщение - ответ веб.сервиса на запрос к веб.методу ?
0
|
0 / 0 / 0
Регистрация: 08.12.2015
Сообщений: 26
|
|
09.12.2015, 17:46 [ТС] | 7 |
Я по пути разобрался что со схемой все в порядке, несоответствует формат.
Да. Мне нужно поменять формат ответа от Веб-Сервиса на запрос к веб.методу. Это возможно вообще?
0
|
2735 / 2041 / 380
Регистрация: 22.07.2011
Сообщений: 7,731
|
|
09.12.2015, 17:52 | 8 |
Да , почему нет , посмотреть сгенерированные классы и подправить их , добавить недостающие поля , задать через атрибуты их soap представление и т.п , но это нужно конкретно смотреть , чего там у Вас нагенерировалось , может просто по новой wsdl заново сгенерировать ?
http://habrahabr.ru/post/254165/ (в msdn на asmx документацию уже забили ) - сейчас ее WCF вытеснил.
0
|
0 / 0 / 0
Регистрация: 08.12.2015
Сообщений: 26
|
|||||||||||
09.12.2015, 17:58 [ТС] | 9 | ||||||||||
В первом сообщении пример запроса на сервис, ответа от него и атрибутов классов которые им соответсвуют. Поля все есть, весь вопрос в наличии префикса и ns1 и определения самого конверта:
Как нужно
0
|
2735 / 2041 / 380
Регистрация: 22.07.2011
Сообщений: 7,731
|
|
09.12.2015, 19:17 | 10 |
Сообщение было отмечено Metall_Version как решение
Решение
Все , понял , я почему то про wsdl подумал ))...
https://msdn.microsoft.com/ru-... s.90).aspx - в общем тут все о форматировании. еще один вариант , веб метод может возвращать XmlElement - в котором уже сами определяете структуру элементов и их nameсspace-ы. Была еще когда то библиотека - SoapExtension (https://msdn.microsoft.com/en-... 48814.aspx) , которая давала полный контроль над телом ответа , и которая более не поддерживается . но возможно еще на просторах интернета лежит. А вообще , я asmx лет 8 уже не юзал , да и в последних студиях даже таких шаблонов не осталось. - что бы поэкспериментировать , так что , чисто по памяти даю советы ). - и почему бы вам не использовать более современные технологии ?
0
|
0 / 0 / 0
Регистрация: 08.12.2015
Сообщений: 26
|
|
10.12.2015, 11:35 [ТС] | 11 |
Спасибо за ответ. Попробую разобраться с форматированием
Насчёт новых технологий, вы про WCF? Он более гибкий? Насколько я понял он намного сложнее в конфигурировании, а мне как человеку в веб технологиях новому и с этим то не так просто разобраться было
0
|
2735 / 2041 / 380
Регистрация: 22.07.2011
Сообщений: 7,731
|
|
10.12.2015, 17:37 | 12 |
ну у него гораздо больше возможностей и настроек соответственно , но если только SOAP , то по сути , реализация для Вас будет мало чем отличаться от asmx. - все так же контракты . все так же атрибуты.
1
|
0 / 0 / 0
Регистрация: 08.12.2015
Сообщений: 26
|
|
11.12.2015, 09:40 [ТС] | 13 |
Спасибо за ответы. В принципе разобрался.
Теперь ещё один вопрос, может быть знаете. Не могу найти какое событие возникает после возврата ответа от веб сервиса. Вопрос в том чтобы увидеть текст ответа в том виде, в котором он передается клиенту. Как увидеть входящий запрос, разобрался. Сохраняю из через HttpContext.Response. А вот исходящее не могу поймать. Может быть подскажете в какой стороне смотреть хоть? Заранее благодарен.
0
|
2735 / 2041 / 380
Регистрация: 22.07.2011
Сообщений: 7,731
|
|
11.12.2015, 16:04 | 14 |
0
|
11.12.2015, 16:04 | |
11.12.2015, 16:04 | |
Помогаю со студенческими работами здесь
14
Отправка ответа в json формате от службы asmx Изменение адреса для веб-сервиса добавленного через Add Service Reference Время ответа сервиса Получение ответа от сервиса Angular Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |