Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Не корректно импортируется WSDL VS 2012 из web service написанном на Delphi (RadXE3) / 6 сообщений из 6, страница 1 из 1
07.02.2014, 13:16
    #38553234
Wizard2007
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не корректно импортируется WSDL VS 2012 из web service написанном на Delphi (RadXE3)
Здравствуйте!
При импорте WSDL веб сервиса в VS 2013 ( веб сервис написан на Delphi (RadXE3)) при импорте функции сервиса происходит ошибка.
Функция описана в WSDL так
Код: xml
1.
2.
3.
4.
5.
    <message name="GetFileListByDocNumber4Response">
      <part name="AList" type="xs:string"/>
      <part name="AError" type="xs:string"/>
      <part name="return" type="xs:boolean"/>
    </message>


Импортер строит функцию в виде
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
    [System.Web.Services.Protocols.SoapRpcMethodAttribute("urn:uServiceDeskIntf-IServiceDeskRequerestEngine#GetFileListByDocNumber", RequestNamespace="urn:uServiceDeskIntf-IServiceDeskRequerestEngine", ResponseNamespace="urn:uServiceDeskIntf-IServiceDeskRequerestEngine")]
    [return: System.Xml.Serialization.SoapElementAttribute("AList")]
    public string GetFileListByDocNumber(string ANumber, out string AError, out bool @return) {
        object[] results = this.Invoke("GetFileListByDocNumber", new object[] {
                    ANumber});
        AError = ((string)(results[1]));
        @return = ((bool)(results[2]));
        return ((string)(results[0]));
    }


Пока не переправил таким образом ничего не отработало.
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
    [System.Web.Services.Protocols.SoapRpcMethodAttribute("urn:uServiceDeskIntf-IServiceDeskRequerestEngine#GetFileListByDocNumber", RequestNamespace="urn:uServiceDeskIntf-IServiceDeskRequerestEngine", ResponseNamespace="urn:uServiceDeskIntf-IServiceDeskRequerestEngine")]
    [return: System.Xml.Serialization.SoapElementAttribute("AList")]
    public bool GetFileListByDocNumber(string ANumber, out string AList, out string AError) {
        object[] results = this.Invoke("GetFileListByDocNumber", new object[] {
                    ANumber});
        AError = ((string)(results[2]));
        AList = ((string)(results[1]));        
        return ((bool)(results[0]));
    }	



Может настройки какие есть у импортера, что бы он делал это корректно, потому как грустно будет импорт большого сервиса потом руками править.

В мире где каждый второй гений было бы страшно жить, поэтому я живу без страха.
...
Рейтинг: 0 / 0
17.02.2014, 16:30
    #38563308
Wizard2007
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не корректно импортируется WSDL VS 2012 из web service написанном на Delphi (RadXE3)
Up
...
Рейтинг: 0 / 0
17.02.2014, 16:38
    #38563329
RomanH
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не корректно импортируется WSDL VS 2012 из web service написанном на Delphi (RadXE3)
Wizard2007,

Если бы у меня была возможность переделать сигнатуру метода, я бы переделал на:

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
public GetFileListByDocNumberResult GetFileListByDocNumber(string ANumber)

class GetFileListByDocNumberResult 
{
public bool IsError {get;set;}
public string AError {get;set;}
public string AList {get;set;
.............................
}
...
Рейтинг: 0 / 0
18.02.2014, 07:43
    #38563851
Alex Kuznetsov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не корректно импортируется WSDL VS 2012 из web service написанном на Delphi (RadXE3)
Wizard2007,

Может имеет смысл пересмотреть имена параметров метода, потому как имя одного из параметров совпадает с зарезервированным словом...
ни на что не намекает?
...
Рейтинг: 0 / 0
19.02.2014, 12:36
    #38565865
Wizard2007
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не корректно импортируется WSDL VS 2012 из web service написанном на Delphi (RadXE3)
RomanH,

Попробовал воспользоваться вашим советом. писал класс и задал возвращаемый тип параметра этот класс
WSDL выдает

Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
<types>
  <schema targetNamespace="urn:ServiceDeskRequerestEngineObjects">
    <complexType name="T_MyTest">
      <sequence><element name="Name" type="xs:string"/>
      </sequence>
    </complexType>
  </schema>
</types>  
  <message name="fnTest1Response">
    <part name="AError" type="xs:string"/>
    <part name="return" type="ns1:T_MyTest"/>
  </message>



при импорте ошибка

R2706: Для элемента wsdl:binding в ОПИСАНИИ ДОЛЖНО использоваться значение "literal" для атрибута Use во всех элементах soapbind:body, soapbind:fault, soapbind:header и soapbind:headerfault.

Дело в том , что Delphi не умеет делать веб сервисы, в которых бы использовался тип document|literal по поводу этого я задавал отдельный вопрос на форуме http://www.sql.ru/forum/1055300/indysoap-ispolzovat-document-literal-vmesto-rpc-encoding.
...
Рейтинг: 0 / 0
19.02.2014, 12:57
    #38565922
Wizard2007
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не корректно импортируется WSDL VS 2012 из web service написанном на Delphi (RadXE3)
Alex Kuznetsov,

Функция возвращает результат своей работы True или False. Есть два варианта как это можно сделать - при помощи присвоения переменной Result соответствующего значения или через имя функции. Оба результата дают в WSDL выходной параметр названный return. Возможно ли поменять его и какими средствами это сделать я пока не знаю.
...
Рейтинг: 0 / 0
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Не корректно импортируется WSDL VS 2012 из web service написанном на Delphi (RadXE3) / 6 сообщений из 6, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]