1

我有一个 Web 服务,它有一个参数类型为 Collection(字节)的方法。当我尝试使用 wsdl 命令生成代理但数据类型被转换为一维字节数组时。

所以我想创建一个wsdl文件,它的类型为Collection(of byte),使用Add as Service Reference,但即使我将集合类型指定为Collection.objectModel,参数的数据类型仍然是一维字节数组。

有什么办法可以做到这一点,或者我需要手动更改代理文件。?

4

2 回答 2

0

我还创建了一个 Web 服务,其中一个方法返回字节集合数组。我附上了示例代码及其生成的 wsdl。希望这可以帮助你

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

在wsdl中生成wsdl:type的是

    <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 或使用添加引用)如下:

[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]));
    }

如果您需要进一步的帮助,请告诉我。

于 2011-11-02T07:05:47.663 回答
0

您需要指定集合类型:

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

完整的 SvcUtil 文档在这里

于 2010-07-27T04:57:38.897 回答