Модераторы: Partizan, gambit

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> создание клиента, wsdl 
:(
    Опции темы
Idsa
Дата 22.7.2008, 14:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 2086
Регистрация: 5.12.2006
Где: Томск

Репутация: 14
Всего: 62



Grig, я нашел интересные доки как раз по теме совмещения сервисов Java и .NET: 1 часть2 часть3 часть.
Очень полезные статьи, правда подходящего на 100% примера я там не нашел.

Еще можно воспользоваться утилитой SoapUi: http://www.soapui.org/ (не Pro-версия бесплатная). Я ее ни разу не юзал, но вроде как она должна подсказать, есть ли неточности в WSDL сервиса.

Как крайняя мера, можно создать такой же сервис на .NET (с таким же возвращаемым значением и именами параметров) и посмотреть, какой wsdl сгенерирует .NET, а потом сравнить с тем, что сгенерировала Java.


Это сообщение отредактировал(а) Idsa - 22.7.2008, 14:44


--------------------
Мой блог: alexidsa.blogspot.com
PM MAIL ICQ   Вверх
mihryak
Дата 22.7.2008, 15:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 731
Регистрация: 28.4.2007
Где: С-Пб

Репутация: 19
Всего: 36



Idsaздесь написал про расширения
PM MAIL ICQ   Вверх
Idsa
Дата 22.7.2008, 15:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 2086
Регистрация: 5.12.2006
Где: Томск

Репутация: 14
Всего: 62



mihryak, честно говоря, я все это находил в интернете. Я просто не думал, что все автоматически происходит. Получается, сгенерированный студией прокси-класс сам считывает из Web.config'а расширения и вызывает их метода?

Добавлено через 5 минут и 26 секунд
Цитата(mihryak @  22.7.2008,  19:37 Найти цитируемый пост)
Idsa, здесь написал про расширения 

mihryakздесь поставил плюс smile
Спасибо за информацию.


--------------------
Мой блог: alexidsa.blogspot.com
PM MAIL ICQ   Вверх
mihryak
Дата 22.7.2008, 16:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 731
Регистрация: 28.4.2007
Где: С-Пб

Репутация: 19
Всего: 36



Цитата(Idsa @  22.7.2008,  16:49 Найти цитируемый пост)
Получается, сгенерированный студией прокси-класс сам считывает из Web.config'а расширения и вызывает их метода?

именно smile сам удивился в своё время
PM MAIL ICQ   Вверх
Idsa
Дата 22.7.2008, 16:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 2086
Регистрация: 5.12.2006
Где: Томск

Репутация: 14
Всего: 62



Так. Офтопный вопрос решили... остался главный smile
Grig, есть какие-нибудь новости по поводу SoapUI и сравнения wsdl Java и .NET?


--------------------
Мой блог: alexidsa.blogspot.com
PM MAIL ICQ   Вверх
Grig
Дата 22.7.2008, 16:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 809
Регистрация: 29.4.2005
Где: Иркутск

Репутация: нет
Всего: 16



Idsa, и все-все-все! Завтра продолжим, не теряйте =)


--------------------
        
PM MAIL ICQ   Вверх
Grig
Дата 23.7.2008, 09:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 809
Регистрация: 29.4.2005
Где: Иркутск

Репутация: нет
Всего: 16



Создал в .Net аналогичный веб-сервис на J#:
Код

import System.Web.*;
import System.Web.Services.*;
import System.Web.Services.Protocols.*;

/** @attribute WebService(Namespace = "http://tempuri.org/") */
/** @attribute WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1) */
public class Service extends System.Web.Services.WebService {

public Service () {

  }


    /** @attribute WebMethod() */
    public DistWay[] getDistWay()
    {
        return DistUtils.getDistList();
    }

}

public class DistWay
{
    public int PRED_ID;
    public String PRED;
}

class DistUtils
{
    public static DistWay[] getDistList()
    {
        DistWay[] arr_dist_way = new DistWay[1];
        arr_dist_way[0] = new DistWay();
        arr_dist_way[0].PRED_ID = 1450;
        arr_dist_way[0].PRED = "ПЧ-01";
        return arr_dist_way;
    }

}



и вот его wsdl: http://localhost:2872/WebSite4/Service.asmx?wsdl
Код

  <?xml version="1.0" encoding="utf-8" ?> 
- <wsdl:definitions xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tm="http://microsoft.com/wsdl/mime/textMatching/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/" xmlns:tns="http://tempuri.org/" xmlns:s="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/" xmlns:http="http://schemas.xmlsoap.org/wsdl/http/" targetNamespace="http://tempuri.org/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">
- <wsdl:types>
- <s:schema elementFormDefault="qualified" targetNamespace="http://tempuri.org/">
- <s:element name="getDistWay">
  <s:complexType /> 
  </s:element>
- <s:element name="getDistWayResponse">
- <s:complexType>
- <s:sequence>
  <s:element minOccurs="0" maxOccurs="1" name="getDistWayResult" type="tns:ArrayOfDistWay" /> 
  </s:sequence>
  </s:complexType>
  </s:element>
- <s:complexType name="ArrayOfDistWay">
- <s:sequence>
  <s:element minOccurs="0" maxOccurs="unbounded" name="DistWay" nillable="true" type="tns:DistWay" /> 
  </s:sequence>
  </s:complexType>
- <s:complexType name="DistWay">
- <s:sequence>
  <s:element minOccurs="1" maxOccurs="1" name="PRED_ID" type="s:int" /> 
  <s:element minOccurs="0" maxOccurs="1" name="PRED" type="s:string" /> 
  </s:sequence>
  </s:complexType>
  </s:schema>
  </wsdl:types>
- <wsdl:message name="getDistWaySoapIn">
  <wsdl:part name="parameters" element="tns:getDistWay" /> 
  </wsdl:message>
- <wsdl:message name="getDistWaySoapOut">
  <wsdl:part name="parameters" element="tns:getDistWayResponse" /> 
  </wsdl:message>
- <wsdl:portType name="ServiceSoap">
- <wsdl:operation name="getDistWay">
  <wsdl:input message="tns:getDistWaySoapIn" /> 
  <wsdl:output message="tns:getDistWaySoapOut" /> 
  </wsdl:operation>
  </wsdl:portType>
- <wsdl:binding name="ServiceSoap" type="tns:ServiceSoap">
  <soap:binding transport="http://schemas.xmlsoap.org/soap/http" /> 
- <wsdl:operation name="getDistWay">
  <soap:operation soapAction="http://tempuri.org/getDistWay" style="document" /> 
- <wsdl:input>
  <soap:body use="literal" /> 
  </wsdl:input>
- <wsdl:output>
  <soap:body use="literal" /> 
  </wsdl:output>
  </wsdl:operation>
  </wsdl:binding>
- <wsdl:binding name="ServiceSoap12" type="tns:ServiceSoap">
  <soap12:binding transport="http://schemas.xmlsoap.org/soap/http" /> 
- <wsdl:operation name="getDistWay">
  <soap12:operation soapAction="http://tempuri.org/getDistWay" style="document" /> 
- <wsdl:input>
  <soap12:body use="literal" /> 
  </wsdl:input>
- <wsdl:output>
  <soap12:body use="literal" /> 
  </wsdl:output>
  </wsdl:operation>
  </wsdl:binding>
- <wsdl:service name="Service">
- <wsdl:port name="ServiceSoap" binding="tns:ServiceSoap">
  <soap:address location="http://localhost:2872/WebSite4/Service.asmx" /> 
  </wsdl:port>
- <wsdl:port name="ServiceSoap12" binding="tns:ServiceSoap12">
  <soap12:address location="http://localhost:2872/WebSite4/Service.asmx" /> 
  </wsdl:port>
  </wsdl:service>
  </wsdl:definitions>


все это и подключается и работает замечательно.

С wsdl сгенерированным Java2WSDL отличается в основном в блоке <wsdl:types>:
Код

  <?xml version="1.0" encoding="UTF-8" ?> 
- <wsdl:definitions targetNamespace="http://services.osm.main" xmlns:apachesoap="http://xml.apache.org/xml-soap" xmlns:impl="http://services.osm.main" xmlns:intf="http://services.osm.main" xmlns:tns1="DistWay" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:wsdlsoap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
- <!-- 
WSDL created by Apache Axis version: 1.4
Built on Apr 22, 2006 (06:55:48 PDT)

  --> 
- <wsdl:types>
- <schema elementFormDefault="qualified" targetNamespace="http://services.osm.main" xmlns="http://www.w3.org/2001/XMLSchema">
  <import namespace="DistWay" /> 
- <element name="getDistWay">
  <complexType /> 
  </element>
- <element name="getDistWayResponse">
- <complexType>
- <sequence>
  <element maxOccurs="unbounded" name="getDistWayReturn" type="tns1:DistWay" /> 
  </sequence>
  </complexType>
  </element>
  </schema>
- <schema elementFormDefault="qualified" targetNamespace="DistWay" xmlns="http://www.w3.org/2001/XMLSchema">
- <complexType name="DistWay">
- <sequence>
  <element name="PRED_ID" type="xsd:int" /> 
  <element name="PRED" nillable="true" type="xsd:string" /> 
  </sequence>
  </complexType>
  </schema>
  </wsdl:types>
- <wsdl:message name="getDistWayResponse">
  <wsdl:part element="impl:getDistWayResponse" name="parameters" /> 
  </wsdl:message>
- <wsdl:message name="getDistWayRequest">
  <wsdl:part element="impl:getDistWay" name="parameters" /> 
  </wsdl:message>
- <wsdl:portType name="Main">
- <wsdl:operation name="getDistWay">
  <wsdl:input message="impl:getDistWayRequest" name="getDistWayRequest" /> 
  <wsdl:output message="impl:getDistWayResponse" name="getDistWayResponse" /> 
  </wsdl:operation>
  </wsdl:portType>
- <wsdl:binding name="MainSoapBinding" type="impl:Main">
  <wsdlsoap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http" /> 
- <wsdl:operation name="getDistWay">
  <wsdlsoap:operation soapAction="" /> 
- <wsdl:input name="getDistWayRequest">
  <wsdlsoap:body use="literal" /> 
  </wsdl:input>
- <wsdl:output name="getDistWayResponse">
  <wsdlsoap:body use="literal" /> 
  </wsdl:output>
  </wsdl:operation>
  </wsdl:binding>
- <wsdl:service name="MainService">
- <wsdl:port binding="impl:MainSoapBinding" name="Main">
  <wsdlsoap:address location="http://localhost:8001/services/Main" /> 
  </wsdl:port>
  </wsdl:service>
  </wsdl:definitions>


JavaWSDL в этом плане выглядит более куцо.


в программе SOAPUi  поглядел Request того и другого WSDL. Они абсолютно идентичны.

Вывод напрашивается хочешь не хочешь, а придеться как-нибудь Явой генерить похожий wsdl.
Так ведь понимаю?
Может есть еще другие пути решения проблемы?



--------------------
        
PM MAIL ICQ   Вверх
Idsa
Дата 23.7.2008, 09:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 2086
Регистрация: 5.12.2006
Где: Томск

Репутация: 14
Всего: 62



Цитата(Grig @  23.7.2008,  13:02 Найти цитируемый пост)
Вывод напрашивается хочешь не хочешь, а придеться как-нибудь Явой генерить похожий wsdl.
Так ведь понимаю?
Может есть еще другие пути решения проблемы?

Стандарты веб-сервисов не сразу строились... поэтому, если та утилита, которую Вы используете в Java, генерирует wsdl по старому стандарту, ничего хорошего от нее ждать не стоит. Можно попробовать найти более новую версию генератора.
Кстати можно попробовать подменить wsdl в явовском сервисе на тот, который сгенерировала .net'овская утилита.
В той статье, ссылку на которую я указывал выше (в первой части), говорится, что в идеале wsdl нужно писать ручками. Причем wsdl нужно писать до написания самого сервиса (опять же, в идеале). В этом определенно есть смысл... но для этого нужно провести не один рабочий день, тщательно изучая стандарт. Если же идти по пути эникейщика (что, собственно, 99.999% программистов и делают), то нужно просто искать утилиты, которые будут генерировать совместимый wsdl.


--------------------
Мой блог: alexidsa.blogspot.com
PM MAIL ICQ   Вверх
Grig
Дата 23.7.2008, 09:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 809
Регистрация: 29.4.2005
Где: Иркутск

Репутация: нет
Всего: 16



буду дальше пытаться. спасибо за помощь!


--------------------
        
PM MAIL ICQ   Вверх
Grig
Дата 30.7.2008, 11:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 809
Регистрация: 29.4.2005
Где: Иркутск

Репутация: нет
Всего: 16



Все решилось довольно просто: в файле развертывания wsdd надо прописать на только классы, но и сложные типы данных вроде массивов. 
Хоть это и не имеет отношение к .Net, публикую здесь вдруг кому понадобиться:
server-config.wsdd
Код

    <service name="array" provider="java:RPC" style="wrapped" use="literal">
      <namespace>http://soapinterop.org</namespace>
      <parameter name="className" value="soapinterop.org.ArrayTest" />
      <parameter name="allowedMethods" value="*" />

      <!-- for when there is type information in the request -->
        <typeMapping
          xmlns:ns="http://soapinterop.org"
          qname="ns:ArrayOfString"
          type="java:java.lang.String[]"
          serializer="org.apache.axis.encoding.ser.ArraySerializerFactory"
          deserializer="org.apache.axis.encoding.ser.ArrayDeserializerFactory"
          encodingStyle=""
        />

        <typeMapping
          xmlns:ns="http://soapinterop.org"
          qname="ns:array"
          type="java:java.lang.String[]"
          serializer="org.apache.axis.encoding.ser.ArraySerializerFactory"
          deserializer="org.apache.axis.encoding.ser.ArrayDeserializerFactory"
          encodingStyle=""
        />

        <typeMapping
          xmlns:ns="http://soapinterop.org"
          qname="ns:DistUtils"
          type="java:soapinterop.org.DistUtils"
          serializer="org.apache.axis.encoding.ser.BeanSerializerFactory"
          deserializer="org.apache.axis.encoding.ser.BeanDeserializerFactory"
          encodingStyle=""
        />

        <typeMapping
          xmlns:ns="http://soapinterop.org"
          qname="ns:DistWay"
          type="java:soapinterop.org.DistWay"
          serializer="org.apache.axis.encoding.ser.BeanSerializerFactory"
          deserializer="org.apache.axis.encoding.ser.BeanDeserializerFactory"
          encodingStyle=""
        />

</service>



--------------------
        
PM MAIL ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.1563 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.