2015-01-21 5 views
0

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#으로 작성되고 구성되는 방법에있는 것처럼 보입니다.

+0

서비스 측면에서 품목 유형 정의를 게시하십시오. – iamkrillin

+0

첫 번째 코드 블록 – Hyzac

+0

에 나와있어 클라이언트 측과 비슷합니다. – iamkrillin

답변

0

좋아요, stuartd의 의견은 문제에 대한 자세한 내용을 제공하고이를 Serviceprovider에 제공하면 결과가 구조에서 답을 다시 잡을 수있었습니다. 이렇게하면 문제가 해결되고 모든 데이터가 올바르게 deserialize됩니다. 의견을 보내 주셔서 감사합니다.