c#中的服务响应字段问题

问题描述 投票:0回答:1

我试图在c#中找到这个基于WSDL的服务有什么问题。

WSDL包含大量信息,但与相关方法相关的信息如下所示:

<wsdl:operation name="GetStock">
<wsdl:input message="tns:GetStockRequest"/>
<wsdl:output message="tns:GetStockResponse"/>
</wsdl:operation>

<wsdl:message name="GetStockResponse">
<wsdl:part name="parameters" element="tns:GetStockResponse"/>
</wsdl:message>

<xsd:element name="GetStockResponse">
<xsd:complexType>
<xsd:sequence>
 <xsd:element name="Items" minOccurs="0" maxOccurs="1" type="tns:ArrayOfItems"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>

<xsd:complexType name="ArrayOfItems">
<xsd:sequence>
<xsd:element name="Item" minOccurs="0" maxOccurs="unbounded" nillable="true" type="tns:Item"/>
</xsd:sequence>
</xsd:complexType>
<xsd:element name="ArrayOfItems" type="tns:ArrayOfItems"/>

<xsd:complexType name="Item">
<xsd:sequence>
<xsd:element name="ItemNo" minOccurs="0" maxOccurs="1" type="xsd:string"/>
<xsd:element name="StoreID" minOccurs="0" maxOccurs="1" type="xsd:string"/>
<xsd:element name="NotInERP" minOccurs="0" maxOccurs="1" type="xsd:string"/>
<xsd:element name="DeliveryTimeText" minOccurs="0" maxOccurs="1" type="xsd:string"/>
<xsd:element name="DeliveryDays" minOccurs="0" maxOccurs="1" type="xsd:integer"/>
<xsd:element name="InStockQty" minOccurs="0" maxOccurs="1" type="xsd:integer"/>
<xsd:element name="InShowRoom" minOccurs="0" maxOccurs="1" type="xsd:string"/>
<xsd:element name="Points" minOccurs="0" maxOccurs="1" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
<xsd:element name="Item" type="tns:Item"/>

为此服务创建的Reference.cs如下所示

[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
[System.Runtime.Serialization.DataContractAttribute(Name="Item", Namespace="http://www.unikum.se/pws")]
[System.SerializableAttribute()]
public partial class Item : object, System.Runtime.Serialization.IExtensibleDataObject, System.ComponentModel.INotifyPropertyChanged {

    [System.NonSerializedAttribute()]
    private System.Runtime.Serialization.ExtensionDataObject extensionDataField;

    [System.Runtime.Serialization.OptionalFieldAttribute()]
    private string ItemNoField;

    [System.Runtime.Serialization.OptionalFieldAttribute()]
    private string StoreIDField;

    [System.Runtime.Serialization.OptionalFieldAttribute()]
    private string NotInERPField;

    [System.Runtime.Serialization.OptionalFieldAttribute()]
    private string DeliveryTimeTextField;

    [System.Runtime.Serialization.OptionalFieldAttribute()]
    private long DeliveryDaysField;

    [System.Runtime.Serialization.OptionalFieldAttribute()]
    private long InStockQtyField;

    [System.Runtime.Serialization.OptionalFieldAttribute()]
    private string InShowRoomField;

    [System.Runtime.Serialization.OptionalFieldAttribute()]
    private string PointsField;

    [global::System.ComponentModel.BrowsableAttribute(false)]
    public System.Runtime.Serialization.ExtensionDataObject ExtensionData {
        get {
            return this.extensionDataField;
        }
        set {
            this.extensionDataField = value;
        }
    }

    [System.Runtime.Serialization.DataMemberAttribute(EmitDefaultValue=false)]
    public string ItemNo {
        get {
            return this.ItemNoField;
        }
        set {
            if ((object.ReferenceEquals(this.ItemNoField, value) != true)) {
                this.ItemNoField = value;
                this.RaisePropertyChanged("ItemNo");
            }
        }
    }

    [System.Runtime.Serialization.DataMemberAttribute(EmitDefaultValue=false)]
    public string StoreID {
        get {
            return this.StoreIDField;
        }
        set {
            if ((object.ReferenceEquals(this.StoreIDField, value) != true)) {
                this.StoreIDField = value;
                this.RaisePropertyChanged("StoreID");
            }
        }
    }

    [System.Runtime.Serialization.DataMemberAttribute(EmitDefaultValue=false, Order=2)]
    public string NotInERP {
        get {
            return this.NotInERPField;
        }
        set {
            if ((object.ReferenceEquals(this.NotInERPField, value) != true)) {
                this.NotInERPField = value;
                this.RaisePropertyChanged("NotInERP");
            }
        }
    }

    [System.Runtime.Serialization.DataMemberAttribute(EmitDefaultValue=false, Order=3)]
    public string DeliveryTimeText {
        get {
            return this.DeliveryTimeTextField;
        }
        set {
            if ((object.ReferenceEquals(this.DeliveryTimeTextField, value) != true)) {
                this.DeliveryTimeTextField = value;
                this.RaisePropertyChanged("DeliveryTimeText");
            }
        }
    }

    [System.Runtime.Serialization.DataMemberAttribute(Order=4)]
    public long DeliveryDays {
        get {
            return this.DeliveryDaysField;
        }
        set {
            if ((this.DeliveryDaysField.Equals(value) != true)) {
                this.DeliveryDaysField = value;
                this.RaisePropertyChanged("DeliveryDays");
            }
        }
    }

    [System.Runtime.Serialization.DataMemberAttribute(Order=5)]
    public long InStockQty {
        get {
            return this.InStockQtyField;
        }
        set {
            if ((this.InStockQtyField.Equals(value) != true)) {
                this.InStockQtyField = value;
                this.RaisePropertyChanged("InStockQty");
            }
        }
    }

    [System.Runtime.Serialization.DataMemberAttribute(EmitDefaultValue=false, Order=6)]
    public string InShowRoom {
        get {
            return this.InShowRoomField;
        }
        set {
            if ((object.ReferenceEquals(this.InShowRoomField, value) != true)) {
                this.InShowRoomField = value;
                this.RaisePropertyChanged("InShowRoom");
            }
        }
    }

    [System.Runtime.Serialization.DataMemberAttribute(EmitDefaultValue=false, Order=7)]
    public string Points {
        get {
            return this.PointsField;
        }
        set {
            if ((object.ReferenceEquals(this.PointsField, value) != true)) {
                this.PointsField = value;
                this.RaisePropertyChanged("Points");
            }
        }
    }

    public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;

    protected void RaisePropertyChanged(string propertyName) {
        System.ComponentModel.PropertyChangedEventHandler propertyChanged = this.PropertyChanged;
        if ((propertyChanged != null)) {
            propertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName));
        }
    }
}

在询问特定项目时,我在Fiddler中得到了这个结果

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<GetStockResponse xmlns="http://www.unikum.se/pws">
<Items>
<Item>
<ItemNo>0000001234</ItemNo>
<DeliveryTimeText>4-6 veckor</DeliveryTimeText>
<DeliveryDays>42</DeliveryDays>
<Points>17</Points>
<StoreID>036</StoreID>
<NotInERP>Nej</NotInERP>
<InStockQty>4</InStockQty>
<InShowRoom>Nej</InShowRoom>
</Item>
</Items>
</GetStockResponse>
</soap:Body>
</soap:Envelope>

所以看起来都很好,对吗?为什么某些字段在使用该服务的程序中的序列化结果中为空呢?字段如下所示:

  • DeliveryDays(作品):42
  • DeliveryTimeText(作品):“4-6周”
  • InShowRoom(不起作用):null
  • InStockQty(不起作用):0
  • ItemNo(works):“0000001234”
  • NotInERP(不起作用):null
  • 积分(作品):“17”
  • StoreID(不起作用):null

在尝试调试时,任何人都有关于要查找的内容的任何指示?大多数这些领域以前一直在工作,但一个接一个地停止工作,我认为这与ERP方面的服务变化有关。

由于我不对这部分负责,所以我试图提供足够的细节,说明为什么在C#中使用它时它不起作用。我的意思是,因为一些字段工作并且Fiddler中的响应看起来不错,它似乎是基于WSDL信息在C#中如何创建和配置路由器的。

c# web-services wsdl pyramid
1个回答
0
投票

好的,stuartd的评论提供了有关该问题的更多详细信息,并将其提供给Serviceprovider导致他们可以在他们的答案中重新排列结构。这解决了问题,所有数据都被正确反序列化。感谢您的投入。

© www.soinside.com 2019 - 2024. All rights reserved.