我需要測試在REST WCF服務的.NET方法,即需要傳遞一個DataTable,並也可以返回一個DataTable:HttpPost以REST WCF服務 - 葛亭空表時嘗試發送數據表
DataTable TryPostDataTable(DataTable dataTable);
在我的Java測試代碼中,我使用HtttClient向此服務發送Post請求。它有頭:
"Content-Type", "text/xml; charset=utf-8"
和身體:
<TryPostDataTable xmlns="http://tempuri.org/">
<dataTable>
<Person>
<name>A Name</name>
<age>An Age</age>
</Person>
</dataTable>
</TryPostDataTable>
但是當服務接收請求,數據表變量總是成爲一個空DataTable實例,沒有行和列
如果我將dataTable的類型更改爲String,並將Post主體更改爲:
<TryPostDataTable xmlns="http://tempuri.org/">
<datatable>
TestString
</datatable>
</TryPostDataTable>
然後正確解析請求。
我想不出如何通過HttpPost傳遞一個DataTable對象。在Rest服務中從XML到DataTable的解析過程有什麼問題?或者我的帖子不正確?
任何幫助將非常感激。
//編輯1:
我試圖使用該代碼來生成XML內容:
DataTable dtEmployee = new DataTable("Person");
dtEmployee.Columns.Add("Name", typeof(string));
dtEmployee.Columns.Add("Age", typeof(string));
dtEmployee.Rows.Add("A Name", "An Age");
dtEmployee.WriteXml(@"C:\Working\Employee.xml", XmlWriteMode.WriteSchema);
這將產生:
<xs:schema id="NewDataSet" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xs:element name="NewDataSet" msdata:IsDataSet="true" msdata:MainDataTable="Person" msdata:UseCurrentLocale="true">
<xs:complexType>
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:element name="Person">
<xs:complexType>
<xs:sequence>
<xs:element name="Name" type="xs:string" minOccurs="0" />
<xs:element name="Age" type="xs:string" minOccurs="0" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:choice>
</xs:complexType>
</xs:element>
<Person>
<Name>A Name</Name>
<Age>An Age</Age>
</Person>
然後我使用httpPost結束這個XML到TryPostDataTable方法。
服務現在成功地解析模式並生成一個「Person」表,其中有2列「Name」 - 「Age」,分配給變量dataTable。但沒有排 - 內部沒有數據。
你能證明你的人的類?我的猜測是它的不可序列化? – Chris
@Chris我沒有Person類。服務應該將我的XML解析爲DataTable,名稱爲「Person」,2列「name」 - 「age」,以及一行「A Name」 - 「An Age」? – Pham
否 - 您試圖發佈帶有Person類型屬性的數據表,其中包含字符串屬性名稱和年齡。 – Chris