Невозможно создать файл wsdl с методами, имеющими тип generic collection Datatype. - PullRequest
1 голос
/ 27 июля 2010

У меня есть веб-сервис, у которого есть метод с параметром типа Collection (of Byte).Когда я пытаюсь сгенерировать прокси с помощью команды wsdl, но тип данных преобразуется в одномерный массив байтов.

Поэтому я подумал о создании файла wsdl, который будет иметь тип как Collection (of byte), используя Addв качестве ссылки на службу, но даже если я указываю тип коллекции как Collection.objectModel, параметр по-прежнему имеет тип данных как одномерный массив байтов.

Есть ли способ сделать это, или вручную, мне нужно изменить вфайл прокси .?

Ответы [ 2 ]

0 голосов
/ 02 ноября 2011

Я также создал веб-сервис, в котором метод возвращает массив байтов.Я прилагаю пример кода и его сгенерированный WSDL.Надеюсь, что это может помочь вам

public byte[][] GetPDFs(String searchQuery)
    {
List<Byte[]> list = new List<byte[]>();
// DO YOUR WORK
 return list.ToArray();
}

и сгенерировано wsdl:type в wsdl равно

    <wsdl:types>
    <s:schema elementFormDefault="qualified" targetNamespace="http://TDS.elixir.com/">
      <s:element name="GetPDFs">
        <s:complexType>
          <s:sequence>
            <s:element minOccurs="0" maxOccurs="1" name="searchQuery" type="s:string" />
          </s:sequence>
        </s:complexType>

      </s:element>
      <s:element name="GetPDFsResponse">
        <s:complexType>
          <s:sequence>
            <s:element minOccurs="0" maxOccurs="1" name="GetPDFsResult" type="tns:ArrayOfBase64Binary" />
          </s:sequence>
        </s:complexType>
      </s:element>
      <s:complexType name="ArrayOfBase64Binary">

        <s:sequence>
          <s:element minOccurs="0" maxOccurs="unbounded" name="base64Binary" nillable="true" type="s:base64Binary" />
        </s:sequence>
      </s:complexType>
    </s:schema>
  </wsdl:types>

, а сгенерированный прокси-код (wsdl.exe или с помощью ссылки add) выглядит так:*

[System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://tempuri.org/GetPDFs", RequestNamespace="http://tempuri.org/", ResponseNamespace="http://tempuri.org/", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)]
    public byte[][] GetPDFs(string searchQuery) {
        object[] results = this.Invoke("GetPDFs", new object[] {
                    searchQuery});
        return ((byte[][])(results[0]));
    }

Пожалуйста, дайте мне знать, если вам нужна дополнительная помощь.

0 голосов
/ 27 июля 2010

Необходимо указать тип коллекции:

svcutil / t: code /ct:System.Collections.Generic.List`1

Полная документация SvcUtil здесь .

...