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

Поиск:

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


Опытный
**


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

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



Здравствуйте, товарищи!
Я на Яве написал веб-сервис.
ява-клиенты понимают его нормально.

А вот на C# не могут его подключить(по wsdl)

Хотелось бы найти какой-нибудь примерчик по созданию клиента с подключением к wsdl. Так как сам я в С# ни бум-бум.


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


Эксперт
****


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

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



Цитата(Grig @  17.7.2008,  17:34 Найти цитируемый пост)
А вот на C# не могут его подключить(по wsdl)

Не работает или не знаете, как подключить? Если второе, то в гугл: http://www.google.ru/search?aq=f&compl...1%D0%BA&lr=
А если не работает, хотелось бы увидеть wsdl файл.


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


Опытный
**


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

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



немного разобрался, и вот с какой бедой столкнулся:
1. Написал сервис на Java

Main.java
Код

package services.osm.main;

public class Main {
    int TEST;

    public void setTEST(int pTEST) {
        System.out.println(pTEST);
        this.TEST = pTEST;
    }

    public int getTEST() {
        return TEST;
    }

    public DistWay getDistWay() {
        DistWay arr_dist_way = new DistWay(1450, "ПЧ-01");
        return arr_dist_way;
    }
}



DistWay.java
Код

package services.osm.main;

public class DistWay implements java.io.Serializable {
    int PRED_ID;
    String PRED;

    public void setPRED_ID(int pPRED_ID) {
        this.PRED_ID = pPRED_ID;
    }

    public int getPRED_ID() {
        return PRED_ID;
    }


    public void setPRED(String pPRED) {
        this.PRED = pPRED;
    }

    public String getPRED() {
        return PRED;
    }

    public DistWay(int PRED_ID, String PRED) {
        this.PRED_ID = PRED_ID;
        this.PRED = PRED;
    }
}



server-config.wsdd
Код

    <service name="Main" provider="java:RPC" style="document" use="literal">
        <parameter name="className" value="services.osm.main.Main"/>
        <parameter name="allowedMethods" value="*"/>
        <parameter name="scope" value="Application"/>
        <namespace>http://services.osm.main</namespace>
        <beanMapping qname="ns:DistWay" xmlns:ns="DistWay" languageSpecificType="java:services.osm.main.DistWay"/>
    </service>


в результате получаем wsdl:
Код

  <?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="pTEST" type="xsd:int" /> 
  <element name="getTESTReturn" type="xsd:int" /> 
  <element name="getDistWayReturn" type="tns1:DistWay" /> 
  </schema>
- <schema elementFormDefault="qualified" targetNamespace="DistWay" xmlns="http://www.w3.org/2001/XMLSchema">
- <complexType name="DistWay">
- <sequence>
  <element name="PRED" nillable="true" type="xsd:string" /> 
  <element name="PRED_ID" type="xsd:int" /> 
  </sequence>
  </complexType>
  </schema>
  </wsdl:types>
- <wsdl:message name="getDistWayResponse">
  <wsdl:part element="impl:getDistWayReturn" name="getDistWayReturn" /> 
  </wsdl:message>
  <wsdl:message name="getTESTRequest" /> 
- <wsdl:message name="setTESTRequest">
  <wsdl:part element="impl:pTEST" name="pTEST" /> 
  </wsdl:message>
  <wsdl:message name="setTESTResponse" /> 
- <wsdl:message name="getTESTResponse">
  <wsdl:part element="impl:getTESTReturn" name="getTESTReturn" /> 
  </wsdl:message>
  <wsdl:message name="getDistWayRequest" /> 
- <wsdl:portType name="Main">
- <wsdl:operation name="setTEST" parameterOrder="pTEST">
  <wsdl:input message="impl:setTESTRequest" name="setTESTRequest" /> 
  <wsdl:output message="impl:setTESTResponse" name="setTESTResponse" /> 
  </wsdl:operation>
- <wsdl:operation name="getTEST">
  <wsdl:input message="impl:getTESTRequest" name="getTESTRequest" /> 
  <wsdl:output message="impl:getTESTResponse" name="getTESTResponse" /> 
  </wsdl:operation>
- <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="setTEST">
  <wsdlsoap:operation soapAction="" /> 
- <wsdl:input name="setTESTRequest">
  <wsdlsoap:body use="literal" /> 
  </wsdl:input>
- <wsdl:output name="setTESTResponse">
  <wsdlsoap:body use="literal" /> 
  </wsdl:output>
  </wsdl:operation>
- <wsdl:operation name="getTEST">
  <wsdlsoap:operation soapAction="" /> 
- <wsdl:input name="getTESTRequest">
  <wsdlsoap:body use="literal" /> 
  </wsdl:input>
- <wsdl:output name="getTESTResponse">
  <wsdlsoap:body use="literal" /> 
  </wsdl:output>
  </wsdl:operation>
- <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>


Теперь пытаюсь создать клиента на C#
Project -> Add Web Reference
ввожу wsdl http://localhost:8001/services/Main?wsdl
подключаю:

UnitTest1.cs
Код

using System;
using System.Text;
using System.Collections.Generic;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using TestProject2.localhost;


namespace TestProject2
{
    /// <summary>
    /// Summary description for UnitTest1
    /// </summary>
    [TestClass]
    public class UnitTest1
    {
        public UnitTest1()
        {
            TestProject2.localhost.MainService s = new TestProject2.localhost.MainService();
            TestProject2.localhost.DistWay d = new TestProject2.localhost.DistWay();
            s.setTEST(55);//это работает
            d=s.getDistWay();//а это возвращает null
            Console.WriteLine(d.PRED); // на этой строке ошибка
        }

         [TestMethod]
        public void TestMethod1()
        {
            //
            // TODO: Add test logic    here
            //
        }
    }
}


с простым типом данных все нормально, а при попытки вызова функции getDistWay();
возвращается null
Люди, подскажите, что не так делаю?


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


Эксперт
****


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

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



Вроде бы все правильно сделано, и wsdl сгенерирован корректный.
Вот перехватить бы Request и Response при вызове s.GetDistWay... может, там скрывается ответ.

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


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


Опытный
**


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

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



а как их можно перехватить в VS 2005? пробовал отладчиком -- не получилось..


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


Эксперт
****


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

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



Grig, отладчиком-то точно не получится. Думаю, любой снифер справится с этой задачей.


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


Опытный
**


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

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



Цитата(Idsa @  22.7.2008,  10:56 Найти цитируемый пост)
отладчиком-то точно не получится.

ну почему же, можно через SoapExtension получить всю подноготную запросов ответов
можно ещё руками в reference.cs снять атрибут DebuggerStepThrough, чтобы посмотреть, как заполняются свойства (в данном случае это почти бесполезно)
но снифером удобней и быстрее, да
PM MAIL ICQ   Вверх
Idsa
Дата 22.7.2008, 11:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(mihryak @  22.7.2008,  14:24 Найти цитируемый пост)
ну почему же, можно через SoapExtension получить всю подноготную запросов ответов

Интересно. Но, насколько я понял, SoapExtension нужно цеплять к сервису... а сервис-то написан на Java, которая знать не знает о SoapExtension (хотя наверняка в Java есть аналог).


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


Опытный
**


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

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



не, SoapExtension к клиенту прикручивается
в моём рабочем проекте так реализована аутентификация soap-сообщений
PM MAIL ICQ   Вверх
Idsa
Дата 22.7.2008, 12:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Вроде бы все-таки можно цеплять SoapExtension к клиентской части сервиса... только я никак не могу найти соответствующего примера.


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


Опытный
**


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

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



йе!в снифере получил xml следующего вида:
Код

  <?xml version="1.0" encoding="UTF-8" ?> 
- <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
- <soapenv:Body>
- <getPdCommisListResponse xmlns="http://server.cpc.publication">
- <getPdCommisListReturn>
  <DOR_KOD>92</DOR_KOD> 
  <ID_GO>56</ID_GO> 
  <ID_GO_TYPE>0</ID_GO_TYPE> 
  <ID_COMMIS>87</ID_COMMIS> 
  <ID_CHAIRMAN_PERS>835</ID_CHAIRMAN_PERS> 
  <DATE_CHAIRMAN_CH>2005-09-30T16:00:00.000Z</DATE_CHAIRMAN_CH> 
  <DATE_ND>2008-03-11T16:00:00.000Z</DATE_ND> 
  <DATE_KD xsi:nil="true" /> 
  </getPdCommisListReturn>
  </getPdCommisListResponse>
  </soapenv:Body>
  </soapenv:Envelope>


однако при подключении в C#
Код

TestProject3.WebReference.MainServiceClassService s=
    new TestProject3.WebReference.MainServiceClassService();

TestProject3.WebReference.Com[] arCom = 
    s.getPdCommisList(92, 1450, 106, 2008, 1);


возвращается массив пустых классов (((
Что тут можно сделать?

Добавлено через 2 минуты и 37 секунд
Снифер использую HTTP Analyzer 3.2.1
Это кому интересно, хорошая вещь)


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


Эксперт
****


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

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



Grig, я смотрю, Вы уже другой метод тестируете. Тот метод был более подходящим. Во-первых, он возвращал данные статически. Во-вторых, там был не массив, значит анализировать легче.
Сейчас сделайте следующее:
1. Сбилдете сервис на Java
2. Создайте новый Web Reference в .NET
3. Попытайтесь обратиться к GetDistWay
4. Запостите логи снифера по этому запросу.

mihryak, наши с тобой сообщения разошлись в минуту - я не видел твое, когда писал свое smile Буду очень тебе благодарен за пример работы с SoapExtension на клиенте.


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


Опытный
**


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

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



Немного модифицировал Ява-код, теперь он состоит из главного, подчиненного класса и класса-перемычки. О как. иначе не передает.
Main.java
Код

package services.osm.main;
public class Main {

    public DistWay[] getDistWay() {
        return DistUtils.getDistList();
    }
}


DistWay.java
Код

package services.osm.main;
public class DistWay implements java.io.Serializable {
    public int PRED_ID;
    public String PRED;
}



DistUtils.java
Код

package services.osm.main;

class DistUtils implements java.io.Serializable {

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

}


server-config.wsdd
Код

    <service name="Main" provider="java:RPC" style="document" use="literal">
        <parameter name="className" value="services.osm.main.Main"/>
        <parameter name="allowedMethods" value="*"/>
        <parameter name="scope" value="Application"/>
        <namespace>http://services.osm.main</namespace>
        <beanMapping qname="ns:DistWay" xmlns:ns="DistWay" languageSpecificType="java:services.osm.main.DistWay"/>
        <beanMapping qname="ns:DistUtils" xmlns:ns="DistUtils" languageSpecificType="java:services.osm.main.DistUtils"/>
    </service>


wsdl получается вот такой вот:
Код

  <?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="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>
- <schema elementFormDefault="qualified" targetNamespace="http://services.osm.main" xmlns="http://www.w3.org/2001/XMLSchema">
  <import namespace="DistWay" /> 
- <element name="getDistWayReturn">
- <complexType>
- <sequence>
  <element maxOccurs="unbounded" minOccurs="0" name="item" type="tns1:DistWay" /> 
  </sequence>
  </complexType>
  </element>
  </schema>
  </wsdl:types>
- <wsdl:message name="getDistWayResponse">
  <wsdl:part element="impl:getDistWayReturn" name="getDistWayReturn" /> 
  </wsdl:message>
  <wsdl:message name="getDistWayRequest" /> 
- <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>


создаю Web Reference в .NET

Обращаюсь:
Код

TestProject3.localhost.MainService s = new TestProject3.localhost.MainService();
TestProject3.localhost.DistWay d = new TestProject3.localhost.DistWay();
TestProject3.localhost.DistWay[]  dd = s.getDistWay();


снифер пишет -- все путем:
Код

  <?xml version="1.0" encoding="UTF-8" ?> 
- <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
- <soapenv:Body>
- <getDistWayReturn xmlns="http://services.osm.main">
- <item xmlns="">
  <PRED_ID>1450</PRED_ID> 
  <PRED>ПЧ-01</PRED> 
  </item>
  </getDistWayReturn>
  </soapenv:Body>
  </soapenv:Envelope>


а вот объект s.getDistWay(); возвращает нулевой объект (



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


Опытный
**


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

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



простите за уход в оффтоп..
Цитата(Idsa @  22.7.2008,  13:44 Найти цитируемый пост)
Вроде бы все-таки можно цеплять SoapExtension к клиентской части сервиса... только я никак не могу найти соответствующего примера. 

прикручивается, например, в апп.конфиге приложения
Код

    <system.web>
      <webServices>
        <soapExtensionTypes>
          <add type="ClientExtension, ExtensionNamespace" />
        </soapExtensionTypes>
      </webServices>
    </system.web>

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


Эксперт
****


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

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



Плохо, конечно, что мы в одном топике обсуждаем две темы... но что уж поделаешь smile

mihryak, насчет прикручивания я читал... я не пойму, что дальше делать.


--------------------
Мой блог: alexidsa.blogspot.com
PM MAIL ICQ   Вверх
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   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

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


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

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


 




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


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

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