Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Общие вопросы по .NET и C# > создание клиента |
Автор: Grig 17.7.2008, 13:34 |
Здравствуйте, товарищи! Я на Яве написал веб-сервис. ява-клиенты понимают его нормально. А вот на C# не могут его подключить(по wsdl) Хотелось бы найти какой-нибудь примерчик по созданию клиента с подключением к wsdl. Так как сам я в С# ни бум-бум. |
Автор: Idsa 17.7.2008, 14:01 |
Не работает или не знаете, как подключить? Если второе, то в гугл: http://www.google.ru/search?aq=f&complete=1&hl=ru&newwindow=1&client=firefox-a&rls=org.mozilla%3Aru%3Aofficial&hs=Af6&q=c%23+web+services&btnG=%D0%9F%D0%BE%D0%B8%D1%81%D0%BA&lr= А если не работает, хотелось бы увидеть wsdl файл. |
Автор: Grig 22.7.2008, 07:28 | ||||||||||
немного разобрался, и вот с какой бедой столкнулся: 1. Написал сервис на Java Main.java
DistWay.java
server-config.wsdd
в результате получаем wsdl:
Теперь пытаюсь создать клиента на C# Project -> Add Web Reference ввожу wsdl http://localhost:8001/services/Main?wsdl подключаю: UnitTest1.cs
с простым типом данных все нормально, а при попытки вызова функции getDistWay(); возвращается null Люди, подскажите, что не так делаю? |
Автор: Idsa 22.7.2008, 08:47 |
Вроде бы все правильно сделано, и wsdl сгенерирован корректный. Вот перехватить бы Request и Response при вызове s.GetDistWay... может, там скрывается ответ. |
Автор: Grig 22.7.2008, 09:52 |
а как их можно перехватить в VS 2005? пробовал отладчиком -- не получилось.. |
Автор: Idsa 22.7.2008, 09:56 |
Grig, отладчиком-то точно не получится. Думаю, любой снифер справится с этой задачей. |
Автор: mihryak 22.7.2008, 10:24 |
ну почему же, можно через http://msdn.microsoft.com/en-us/library/system.web.services.protocols.soapextension.aspx получить всю подноготную запросов ответов можно ещё руками в reference.cs снять атрибут http://msdn.microsoft.com/en-us/library/system.diagnostics.debuggerstepthroughattribute.aspx, чтобы посмотреть, как заполняются свойства (в данном случае это почти бесполезно) но снифером удобней и быстрее, да |
Автор: mihryak 22.7.2008, 12:43 |
не, SoapExtension к клиенту прикручивается в моём рабочем проекте так реализована аутентификация soap-сообщений |
Автор: Idsa 22.7.2008, 12:44 |
Вроде бы все-таки можно цеплять SoapExtension к клиентской части сервиса... только я никак не могу найти соответствующего примера. |
Автор: Grig 22.7.2008, 12:54 | ||||
йе!в снифере получил xml следующего вида:
однако при подключении в C#
возвращается массив пустых классов ((( Что тут можно сделать? Добавлено через 2 минуты и 37 секунд Снифер использую http://www.securitylab.ru/software/239860.php Это кому интересно, хорошая вещь) |
Автор: Idsa 22.7.2008, 13:08 |
Grig, я смотрю, Вы уже другой метод тестируете. Тот метод был более подходящим. Во-первых, он возвращал данные статически. Во-вторых, там был не массив, значит анализировать легче. Сейчас сделайте следующее: 1. Сбилдете сервис на Java 2. Создайте новый Web Reference в .NET 3. Попытайтесь обратиться к GetDistWay 4. Запостите логи снифера по этому запросу. mihryak, наши с тобой сообщения разошлись в минуту - я не видел твое, когда писал свое ![]() |
Автор: Grig 22.7.2008, 13:55 | ||||||||||||||
Немного модифицировал Ява-код, теперь он состоит из главного, подчиненного класса и класса-перемычки. О как. иначе не передает. Main.java
DistWay.java
DistUtils.java
server-config.wsdd
wsdl получается вот такой вот:
создаю Web Reference в .NET Обращаюсь:
снифер пишет -- все путем:
а вот объект s.getDistWay(); возвращает нулевой объект ( |
Автор: mihryak 22.7.2008, 14:12 | ||||
простите за уход в оффтоп..
прикручивается, например, в апп.конфиге приложения
|
Автор: Idsa 22.7.2008, 14:21 |
Плохо, конечно, что мы в одном топике обсуждаем две темы... но что уж поделаешь ![]() mihryak, насчет прикручивания я читал... я не пойму, что дальше делать. |
Автор: Idsa 22.7.2008, 14:42 |
Grig, я нашел интересные доки как раз по теме совмещения сервисов Java и .NET: http://www-128.ibm.com/developerworks/library/ws-tip-j2eenet1/?ca=dgr-jw22J2EE.Net, http://www.ibm.com/developerworks/webservices/library/ws-tip-j2eenet2.html, http://www.ibm.com/developerworks/webservices/library/ws-tip-j2eenet3/. Очень полезные статьи, правда подходящего на 100% примера я там не нашел. Еще можно воспользоваться утилитой SoapUi: http://www.soapui.org/ (не Pro-версия бесплатная). Я ее ни разу не юзал, но вроде как она должна подсказать, есть ли неточности в WSDL сервиса. Как крайняя мера, можно создать такой же сервис на .NET (с таким же возвращаемым значением и именами параметров) и посмотреть, какой wsdl сгенерирует .NET, а потом сравнить с тем, что сгенерировала Java. |
Автор: mihryak 22.7.2008, 15:37 |
Idsa, http://forum.vingrad.ru/index.php?showtopic=28252&view=findpost&p=1588310 написал про расширения |
Автор: Idsa 22.7.2008, 15:49 |
mihryak, честно говоря, я все это находил в интернете. Я просто не думал, что все автоматически происходит. Получается, сгенерированный студией прокси-класс сам считывает из Web.config'а расширения и вызывает их метода? Добавлено через 5 минут и 26 секунд mihryak, http://forum.vingrad.ru/topic-28252/view-findpost/p-1588310.html поставил плюс ![]() Спасибо за информацию. |
Автор: mihryak 22.7.2008, 16:02 | ||
именно ![]() |
Автор: Idsa 22.7.2008, 16:19 |
Так. Офтопный вопрос решили... остался главный ![]() Grig, есть какие-нибудь новости по поводу SoapUI и сравнения wsdl Java и .NET? |
Автор: Grig 22.7.2008, 16:22 |
Idsa, и все-все-все! Завтра продолжим, не теряйте =) |
Автор: Grig 23.7.2008, 09:02 | ||||||
Создал в .Net аналогичный веб-сервис на J#:
и вот его wsdl: http://localhost:2872/WebSite4/Service.asmx?wsdl
все это и подключается и работает замечательно. С wsdl сгенерированным Java2WSDL отличается в основном в блоке <wsdl:types>:
JavaWSDL в этом плане выглядит более куцо. в программе SOAPUi поглядел Request того и другого WSDL. Они абсолютно идентичны. Вывод напрашивается хочешь не хочешь, а придеться как-нибудь Явой генерить похожий wsdl. Так ведь понимаю? Может есть еще другие пути решения проблемы? |
Автор: Idsa 23.7.2008, 09:31 | ||
Стандарты веб-сервисов не сразу строились... поэтому, если та утилита, которую Вы используете в Java, генерирует wsdl по старому стандарту, ничего хорошего от нее ждать не стоит. Можно попробовать найти более новую версию генератора. Кстати можно попробовать подменить wsdl в явовском сервисе на тот, который сгенерировала .net'овская утилита. В той статье, ссылку на которую я указывал выше (в первой части), говорится, что в идеале wsdl нужно писать ручками. Причем wsdl нужно писать до написания самого сервиса (опять же, в идеале). В этом определенно есть смысл... но для этого нужно провести не один рабочий день, тщательно изучая стандарт. Если же идти по пути эникейщика (что, собственно, 99.999% программистов и делают), то нужно просто искать утилиты, которые будут генерировать совместимый wsdl. |
Автор: Grig 23.7.2008, 09:38 |
буду дальше пытаться. спасибо за помощь! |
Автор: Grig 30.7.2008, 11:22 | ||
Все решилось довольно просто: в файле развертывания wsdd надо прописать на только классы, но и сложные типы данных вроде массивов. Хоть это и не имеет отношение к .Net, публикую здесь вдруг кому понадобиться: server-config.wsdd
|