.NET未反序列化XSD maxOccurs=";无界的;要素

.NET未反序列化XSD maxOccurs=";无界的;要素,.net,serialization,xsd,wsdl,.net,Serialization,Xsd,Wsdl,在尝试使用声明类型数组的WSDL时,.NET无法反序列化响应消息 WSDL 自动生成的客户端代理代码 Visual studio为此服务操作响应消息创建以下定义 [System.Diagnostics.DebuggerStepThroughAttribute()] [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")] [System.ComponentModel.EditorBrow

在尝试使用声明类型数组的WSDL时,.NET无法反序列化响应消息

WSDL

自动生成的客户端代理代码

Visual studio为此服务操作响应消息创建以下定义

[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")]
[System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)]
[System.ServiceModel.MessageContractAttribute(WrapperName="GetServiceRequestSummariesMatchingProfileResponse", WrapperNamespace="http://www.acme.com/webservices/connectors/731/servicerequest/message" +
    "types", IsWrapped=true)]
public partial class GetServiceRequestSummariesMatchingProfileResponse {

    [System.ServiceModel.MessageBodyMemberAttribute(Namespace="http://www.acme.com/schema/uniform/731/servicerequest/sr/srtypes", Order=0)]
    [System.Xml.Serialization.XmlElementAttribute("ServiceRequestSummary")]
    public ServiceRequestSummaryType[] ServiceRequestSummary;

    public GetServiceRequestSummariesMatchingProfileResponse() {
    }

    public GetServiceRequestSummariesMatchingProfileResponse(ServiceRequestSummaryType[] ServiceRequestSummary) {
        this.ServiceRequestSummary = ServiceRequestSummary;
    }
}
这不起作用,序列化程序无法反序列化ServiceRequestSummaryType[]中的ServiceRequestSummaryType对象,因此无论响应是否包含这些对象,其始终为空

响应SOAP消息

    <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <s:Header xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"></s:Header>
    <soap:Body>
        <GetServiceRequestSummariesMatchingProfileResponse xmlns="http://www.acme.com/webservices/connectors/731/servicerequest/messagetypes">
            <ServiceRequestSummary xmlns="http://www.acme.com/schema/uniform/731/servicerequest/sr/srtypes">
                <ServiceRequestIdentification>
                    <ServiceRequestTechnicalKey>MD2P24BENM001</ServiceRequestTechnicalKey>
                    <ReferenceValue>12/00056/SR</ReferenceValue>
                    <AlternativeReferences>
                        <AlternativeReference xmlns="http://www.acme.com/schema/uniform/72b/common/uniformtypes">
                            <ReferenceValue>ssa</ReferenceValue>
                            <ReferenceType>FIRM</ReferenceType>
                        </AlternativeReference>
                    </AlternativeReferences>
                </ServiceRequestIdentification>
                <SiteLocation>
                    <Address>                       </Address>
                    <UPRN></UPRN>
                </SiteLocation>
                <NatureOfComplaint>Test</NatureOfComplaint>
                <AdministrationDetails>
                    <RequestTypeCode>DFOUL</RequestTypeCode>
                    <RequestTypeText>Dog fouling</RequestTypeText>
                    <RequestKindCode>D</RequestKindCode>
                    <RequestKindText>Dog Request</RequestKindText>
                    <AllocatedToCode>EHCALL</AllocatedToCode>
                    <AllocatedToText></AllocatedToText>
                    <TimeAllocated></TimeAllocated>
                    <AllocationHistory>
                        <AllocationHistoryDetail>
                            <OfficerCode>EHCALL</OfficerCode>
                            <OfficerName>EH Call Centre</OfficerName>
                            <AllocationDateTime>2012</AllocationDateTime>
                        </AllocationHistoryDetail>
                    </AllocationHistory>
                    <HowReceivedCode>TELE</HowReceivedCode>
                    <HowReceivedText>telephone</HowReceivedText>
                    <TimeReceived>2012-11-02T13:40:00</TimeReceived>
                    <StatusCode>1_NEW</StatusCode>
                    <StatusText>1_NEW - New Request</StatusText>
                </AdministrationDetails>
                <SubjectDetails>
                    <SubjectContactDetails></SubjectContactDetails>
                </SubjectDetails>
                <RequestType>DOG</RequestType>
                <RequestKindCode>D</RequestKindCode>
                <RequestKindText>Dog Request</RequestKindText>
            </ServiceRequestSummary>
        </GetServiceRequestSummariesMatchingProfileResponse>
        <TransactionReport xmlns="">
            <TransactionComplete>True</TransactionComplete>
            <TransactionSuccess>True</TransactionSuccess>
            <TransactionMessages></TransactionMessages>
        </TransactionReport>
    </soap:Body>
</soap:Envelope>
我们有

[System.Xml.Serialization.XmlElementAttribute("ServiceRequestSummary", Namespace = "http://www.acme.com/schema/uniform/731/servicerequest/sr/srtypes")]
这样就行了。我不明白WSDL或导致反序列化失败的响应消息有什么问题,毕竟VS已经从WSDL自动生成了它的客户机代理代码,没有任何错误


更改自动生成代码不是一个可行的解决方案,如果您能找到导致此问题的原因,请使用雪茄。

根据XMLSpy,此WSDL无效:

File C:\Temp\Untitled1.wsdl is not valid.
    Invalid XML schema: ''s4:ServiceRequestIdentificationType' must refer to an existing simple or complex type.'
        Error location: wsdl:definitions / wsdl:types / s:schema / s:complexType / s:sequence / s:element / @type

您是如何生成代理的?SVCUTIL?如果是这样,那么您需要在命令行上提供所有XML模式文件的路径。

WSDL已经更新。我现在已经通过链接包含了完整的原始WSDL,因为该站点认为它太大,无法包含在线程中。代理是使用visual studio“添加引用”生成的。WSDL似乎没有任何导入,它看起来都是内联的。我无法连接到该URL。抱歉,已将链接修改为正确的google文档共享链接。
File C:\Temp\Untitled1.wsdl is not valid.
    Invalid XML schema: ''s4:ServiceRequestIdentificationType' must refer to an existing simple or complex type.'
        Error location: wsdl:definitions / wsdl:types / s:schema / s:complexType / s:sequence / s:element / @type