C#에서이 WSDL 기반 서비스의 문제점을 찾으려고합니다.C에서 서비스 응답 필드 문제 #
는 WSDL이 많은 내용을 포함하고 있지만, 문제의 방법에 관한 것들과 같습니다:
이 서비스에 대한 생성 된 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));
}
}
}
때 보이는
<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"/>
특정 항목을 묻는 중 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>00000</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>
너무 오래 좋아 보이네? 어떻게 서비스를 소비하는 프로그램의 직렬화 된 결과에서 일부 필드가 null입니까?
- DeliveryDays (작품) : 42
- DeliveryTimeText (작품) : "4-6 veckor"
- InShowRoom이 (작동하지 않습니다) : 널 (null)
- InStockQty을 ( 필드는 다음과 같습니다) "00000"
- NotInERP (작동하지 않습니다 :) 0
- ITEMNO (작품 :) 작동하지 않습니다 널
- 포인트 (작품) : "17"
- StoreID (작동하지 않음) : null
누구든지이 디버깅을 시도 할 때 어떤 포인터가 있습니까? 이 필드의 대부분은 이전에 작동했지만 계속해서 작동을 멈추었으며 ERP 측의 서비스 변경과 관련이 있다고 생각합니다.
저는이 부분에 대해 책임이 없기 때문에 C#에서이 항목을 사용하는 이유에 대해 충분한 세부 정보를 제공하려고합니다. 내 말은 일부 필드가 작동하고 Fiddler의 응답이 라우터가 WSDL 정보를 기반으로 C#으로 작성되고 구성되는 방법에있는 것처럼 보입니다.
서비스 측면에서 품목 유형 정의를 게시하십시오. – iamkrillin
첫 번째 코드 블록 – Hyzac
에 나와있어 클라이언트 측과 비슷합니다. – iamkrillin