私の問題を返す:WCF Webサービスのシリアル化エラー - NULL値
私は、単純な.NETテストクライアントによって呼び出されているとの性質のいくつかのためにnull値を返すWCF Webサービスを持っています返されるカスタムクラス。それが返される直前にブレークポイントでの戻りオブジェクトの値を確認する
- は、すべての値が正しく装着されていることを私に示しているが、そのオブジェクトの値はとすぐに、それが受信されると、そのプロパティのいくつかを示しますヌルである。
- 私は同じ問題を報告している人のいくつかの他のスタックオーバーフロー投稿を読んでいますが、いくつかはインタフェースの[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要求
<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></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レスポンス:
<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クライアント結果:用
'NULL' 値:
- ProductLineItems
- strTaxLinesCountは
- ResultDataSet戻ります0 '
- TotalTaxLines
その適切な値を持つ唯一のプロパティは次のとおりです。
- メッセージ
- のResultCode
んが、例外は、全体の処理中にスローされません。
[DataMember(Order = 1)]でインターフェイスを注文しても、結果には影響しません。 nullと同じプロパティが返されます。
誰かが何か提案があれば、大変感謝しています。私はかなり.NETに慣れていないし、数日間はこの問題に対して頭を叩いています。それ以上の情報/コードスニペットが必要な場合は、私にお知らせください。前もって感謝します。
'WcfTestClient'は、これらの – Urda
ような状況ではあなたの友人である私は、しかしSOAPUIから余分な詳細は私の問題、これを解決することになった、定期的にWCFTestClientを使用して行います時間。 –