我需要在 REST WCF 服务中测试一个 .Net 方法,该方法需要传入一个 DataTable 并返回一个 DataTable:
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 实例,没有行和列
如果我将数据表的类型更改为字符串,并将帖子正文更改为:
<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。但是没有行 - 里面没有数据。