今天用wcf传送datatable时出现下列错误。我估计是序列化的问题。
"An error occurred while receiving the HTTP response to ****.svc.
This could be due to the service endpoint binding not using the HTTP protocol. ……"
网上有人给出了解决方法,即设置DataTable的TableName属性即可。
样例代码:
建立服务契约。契约中一个返加DataTable的方法,一个是返回DataSet的方法。
namespace NavigateService
{
[ServiceContract]
public interface INavigateService
{
[OperationContract]
DataTable GetTableAllData(string tableName);
[OperationContract]
DataSet GetDataSet(List<DataSetObject> tables);
}
}
实现契约,MsSql类是自己建立的一个类,用于取数据。
注意:在返回DataTable的GetTableAllData方法中, tableResult设置了TableName属性。这样Wcf序列化时就不会出错。
而返回DataSet的方法不需要作任何设置。
using System.Data;
using DL;
namespace NavigateService
{
public class NavigateService : INavigateService
{
MsSql msSql = null;
public NavigateService()
{
msSql = new MsSql();
}
public DataTable GetTableAllData(string tableName)
{
DataTable tableResult = null;
tableResult = msSql.GetTableAllData(tableName);
tableResult.TableName = "navigateData";
return tableResult;
}
public DataSet GetDataSet(List<DataSetObject> tables)
{
DataSet resultDataSet = new DataSet();
resultDataSet = msSql.GetDataSet(tables);
return resultDataSet;
}
}
}