Модераторы: 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   Вверх
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

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


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

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


 




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


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

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