Сериализация веб-службы WCF ошибка - возвращение нулевых значений

Моя проблема:

У меня есть веб-служба WCF, которая вызывается простым тестовым клиентом .NET и возвращает нулевые значения для некоторых свойств возвращаемого настраиваемого класса.

  • Проверка значений возвращаемого объекта в точке останова непосредственно перед его возвратом показывает мне, что все значения заполнены правильно, но значение этого объекта сразу после его получения показывает, что некоторые из его свойств являются нулевыми. . '
  • Я прочитал несколько других сообщений о stackoverflow людей, сообщающих о той же проблеме, и некоторые из них были решены путем упорядочивания / назначения порядка [DataContracts] в интерфейсе, но это не повлияло на мои результаты.
  • Кажется, что значения достигают клиентской программы, потому что ответ от запуска теста SoapUI показывает правильные значения в XML.

Код:

[ServiceContract]
public interface IService
{
    [OperationContract]
    TotalTaxResult GetTotalTax(OrderHeader orderHeader);
}

[DataContract]
public class TotalTaxResult
{
    [DataMember]
    public string Message { get; set; }

    [DataMember]
    public ProductLineItem[] ProductLineItems { get; set; }

    [DataMember]
    public string ResultCode { get; set; }

    [DataMember]
    public DataSet ResultDataSet { get; set; }

    [DataMember]
    public string strTaxLinesCount { get; set; }

    [DataMember]
    public DataSet taxDataSet { get; set; }

    [DataMember(IsRequired = true)]
    public decimal TotalTax { get; set; }

    [DataMember]
    public Avalara.AvaTax.Adapter.TaxService.TaxLines TotalTaxLines { get; set; }

}

Soap Request

     <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:tem="http://tempuri.org/" xmlns:sal="http://schemas.datacontract.org/2004/07/SalesService">
   <soapenv:Header/>
   <soapenv:Body>
      <tem:GetTotalTax>
         <!--Optional:-->
         <tem:orderHeader>
            <!--Optional:-->
            <sal:BFCustomerNumber>123456</sal:BFCustomerNumber>
            <!--Optional:-->
            <sal:BFStoreNumber>654321</sal:BFStoreNumber>
            <!--Optional:-->
            <sal:CustomerName>Nick T</sal:CustomerName>
            <!--Optional:-->
            <sal:Message></sal:Message>
            <sal:OrderLineItems>
               <!--Zero or more repetitions:-->
               <sal:OrderLineItem>
                  <sal:ItemNumber>164080</sal:ItemNumber>
                  <sal:LineNumber>1</sal:LineNumber>
                  <sal:Price>100</sal:Price>
                  <sal:Quantity>1</sal:Quantity>
                  <sal:TaxCode>S</sal:TaxCode>
                  <sal:UoM>CA</sal:UoM>
               </sal:OrderLineItem>
            </sal:OrderLineItems>
            <!--Optional:-->
            <sal:PONumber>333000</sal:PONumber>
            <!--Optional:-->
            <sal:ResultCode></sal:ResultCode>
            <!--Optional:-->
            <sal:SourceSystem>WEB</sal:SourceSystem>
            <sal:TestFlag>true</sal:TestFlag>
            <!--Optional:-->
            <sal:TotalTax></sal:TotalTax>
            <!--Optional:-->
            <sal:WarehouseNum>3010</sal:WarehouseNum>
            <!--Optional:-->
            <sal:validDest>
               <!--Optional:-->
               <sal:AddressCode></sal:AddressCode>
               <!--Optional:-->
               <sal:AddressType>S</sal:AddressType>
               <!--Optional:-->
               <sal:CarrierRoute>C022</sal:CarrierRoute>
               <!--Optional:-->
               <sal:City>SAINT LOUIS</sal:City>
               <!--Optional:-->
               <sal:Country>US</sal:Country>
               <!--Optional:-->
               <sal:County>SAINT LOUIS</sal:County>
               <!--Optional:-->
               <sal:FipsCode>2918900000</sal:FipsCode>
               <!--Optional:-->
               <sal:Latitude>30.0000</sal:Latitude>
               <!--Optional:-->
               <sal:Line1>1234 DELMAR DR</sal:Line1>
               <!--Optional:-->
               <sal:Line2></sal:Line2>
               <!--Optional:-->
               <sal:Line3></sal:Line3>
               <!--Optional:-->
               <sal:Line4>SAINT LOUIS MO 63130-6642</sal:Line4>
               <!--Optional:-->
               <sal:Longitude>-95.8765</sal:Longitude>
               <!--Optional:-->
               <sal:PostNet>631306632524</sal:PostNet>
               <!--Optional:-->
               <sal:PostalCode>63130-6642</sal:PostalCode>
               <!--Optional:-->
               <sal:Region>MO</sal:Region>
            </sal:validDest>
            <!--Optional:-->
            <sal:validOrigin>
               <!--Optional:-->
               <sal:AddressCode></sal:AddressCode>
               <!--Optional:-->
               <sal:AddressType>H</sal:AddressType>
               <!--Optional:-->
               <sal:CarrierRoute>R030</sal:CarrierRoute>
               <!--Optional:-->
               <sal:City>SAINT CHARLES</sal:City>
               <!--Optional:-->
               <sal:Country>US</sal:Country>
               <!--Optional:-->
               <sal:County>SAINT CHARLES</sal:County>
               <!--Optional:-->
               <sal:FipsCode>296543210</sal:FipsCode>
               <!--Optional:-->
               <sal:Latitude>35.8034</sal:Latitude>
               <!--Optional:-->
               <sal:Line1>500 ORCHARD LAKES BLVD</sal:Line1>
               <!--Optional:-->
               <sal:Line2></sal:Line2>
               <!--Optional:-->
               <sal:Line3></sal:Line3>
               <!--Optional:-->
               <sal:Line4>SAINT CHARLES MO 63331-4341</sal:Line4>
               <!--Optional:-->
               <sal:Longitude>-95.5021</sal:Longitude>
               <!--Optional:-->
               <sal:PostNet>63389541997</sal:PostNet>
               <!--Optional:-->
               <sal:PostalCode>63331-4341</sal:PostalCode>
               <!--Optional:-->
               <sal:Region>MO</sal:Region>
            </sal:validOrigin>
         </tem:orderHeader>
      </tem:GetTotalTax>
   </soapenv:Body>
</soapenv:Envelope>

Soap Response:

<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
   <s:Body>
      <GetTotalTaxResponse xmlns="http://tempuri.org/">
         <GetTotalTaxResult xmlns:a="http://schemas.datacontract.org/2004/07/SalesService" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
            <a:Message>Total Tax Calc</a:Message>
            <a:ProductLineItems i:nil="true"/>
            <a:ResultCode>7.46</a:ResultCode>
            <a:ResultDataSet i:nil="true"/>
            <a:TotalTax>7.46</a:TotalTax>
            <a:TotalTaxLines xmlns:b="http://schemas.datacontract.org/2004/07/Avalara.AvaTax.Adapter.TaxService"/>
            <a:strTaxLinesCount>1</a:strTaxLinesCount>
            <a:taxDataSet>
               <xs:schema id="NewDataSet" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns="" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
                  <xs:element name="NewDataSet" msdata:IsDataSet="true" msdata:UseCurrentLocale="true">
                     <xs:complexType>
                        <xs:choice minOccurs="0" maxOccurs="unbounded">
                           <xs:element name="TaxDataTable">
                              <xs:complexType>
                                 <xs:sequence>
                                    <xs:element name="TaxIndex" type="xs:int" minOccurs="0"/>
                                    <xs:element name="TaxLineNo" type="xs:string" minOccurs="0"/>
                                    <xs:element name="TaxCode" type="xs:string" minOccurs="0"/>
                                    <xs:element name="TaxAmount" type="xs:decimal" minOccurs="0"/>
                                 </xs:sequence>
                              </xs:complexType>
                           </xs:element>
                        </xs:choice>
                     </xs:complexType>
                  </xs:element>
               </xs:schema>
               <diffgr:diffgram xmlns:diffgr="urn:schemas-microsoft-com:xml-diffgram-v1" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
                  <NewDataSet xmlns="">
                     <TaxDataTable diffgr:id="TaxDataTable1" msdata:rowOrder="0" diffgr:hasChanges="inserted">
                        <TaxIndex>0</TaxIndex>
                        <TaxLineNo>1</TaxLineNo>
                        <TaxCode>P0000000</TaxCode>
                        <TaxAmount>7.46</TaxAmount>
                     </TaxDataTable>
                  </NewDataSet>
               </diffgr:diffgram>
            </a:taxDataSet>
         </GetTotalTaxResult>
      </GetTotalTaxResponse>
   </s:Body>
</s:Envelope>

.NET Client Results :

'нулевые' значения для:

  • ProductLineItems
  • strTaxLinesCount
  • ResultDataSet возвращается как пустой DataSet
  • taxDataSet
  • TotalTax возвращается как «0»
  • TotalTaxLines

Единственные свойства с их правильными значениями:

  • Сообщение
  • ResultCode

Никаких исключений rown в течение всего процесса.

Заказ интерфейса через [DataMember (Order = 1)] не повлиял на результаты. Те же свойства возвращены как null.

Если у кого-нибудь есть предложения, мы будем очень признательны. Я новичок в .NET и уже несколько дней бьюсь головой об этой проблеме. Если потребуется дополнительная информация / фрагменты кода, сообщите мне. Заранее спасибо.

6
задан Urda 27 June 2011 в 21:08
поделиться