Проблема с байтом XSD [] [] в веб-службе - PullRequest
0 голосов
/ 14 февраля 2012

Я пытаюсь передать своему веб-сервису что-то вроде массива байтового массива (byte [] []), чтобы я создал этот xsd-файл:

<?xml version="1.0" encoding="utf-8"?>
<xs:schema id="FileResponse"
targetNamespace="http://tempuri.org/FileResponse.xsd"
elementFormDefault="qualified"
xmlns="http://tempuri.org/FileResponse.xsd"
xmlns:mstns="http://tempuri.org/FileResponse.xsd"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
>

 <xs:complexType name="FileResponse">
<xs:sequence>
  <xs:element name="SPResultItem" maxOccurs="unbounded">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="file" type="xs:unsignedByte" minOccurs="0" maxOccurs="unbounded"></xs:element>
      </xs:sequence>
   </xs:complexType>
  </xs:element>
  <xs:element name="Message" type="xs:string"></xs:element>
</xs:sequence>
 </xs:complexType>

 <xs:element name="FileResponse" type="FileResponse"/>
</xs:schema>

Инструмент XSD генерирует это:

/// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "2.0.50727.3038")]
[System.SerializableAttribute()]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Xml.Serialization.XmlTypeAttribute(Namespace="http://tempuri.org/FileResponse.xsd")]
[System.Xml.Serialization.XmlRootAttribute(Namespace="http://tempuri.org/FileResponse.xsd",     IsNullable=false)]
public partial class FileResponse {

private FileResponseSPResultStatus sPResultStatusField;

private sbyte[][] sPResultItemField;

private string messageField;

/// <remarks/>
public FileResponseSPResultStatus SPResultStatus {
    get {
        return this.sPResultStatusField;
    }
    set {
        this.sPResultStatusField = value;
    }
}

/// <remarks/>
[System.Xml.Serialization.XmlArrayItemAttribute("file", typeof(sbyte), IsNullable=false)]
public sbyte[][] SPResultItem {
    get {
        return this.sPResultItemField;
    }
    set {
        this.sPResultItemField = value;
    }
}

/// <remarks/>
public string Message {
    get {
        return this.messageField;
    }
    set {
        this.messageField = value;
    }
}

}

Как видите, преобразование выглядит хорошо: xsd содержит поле "sbyte [] []" ... Но когда я вызываю метод из этого веб-сервиса (даже если он не использует этот класс), он падает без предоставления информации ...

Как я могу создать XSD, который получает sbyte [] [] или byte [] [] и работает? Большое спасибо !!

1 Ответ

0 голосов
/ 15 февраля 2012

Я решил так:

<?xml version="1.0" encoding="utf-8"?>
<xs:schema id="FileResponse"
targetNamespace="http://tempuri.org/FileResponse.xsd"
elementFormDefault="qualified"
xmlns="http://tempuri.org/FileResponse.xsd"
xmlns:mstns="http://tempuri.org/FileResponse.xsd"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
>

<xs:complexType name="FileResponse">
<xs:sequence>
  <xs:element name="SPResultItem" type="fileList" maxOccurs="unbounded"> </xs:element>
  <xs:element name="Message" type="xs:string"></xs:element>
</xs:sequence>

<xs:complexType name ="fileList">
<xs:sequence>
<xs:element name="file" type="xs:base64Binary"  ></xs:element>
</xs:sequence>
</xs:complexType>
<xs:element name="FileResponse" type="FileResponse"/>

...