| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Общие вопросы по .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
|