Web服务上的XSD byte [] []问题

时间:2012-02-14 07:46:05

标签: xsd xml-serialization wsdl bytearray

我正在尝试将类似于字节数组(byte [] [])的数据传递给我的Web服务来创建此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 [] []”字段......但是当我从这个webservice调用一个方法时(即使它不使用这个类)它崩溃了没有给信息...

如何创建一个接收sbyte [] []或byte [] []的XSD并且有效?非常感谢!!

1 个答案:

答案 0 :(得分:0)

我这样解决了:

<?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"/>