通信对象System.ServiceModel.Channels.ServiceChannel不能用于通信,因为它处于Faulted状态.
什么是这个错误,我将如何解决它?
我有一个WCF服务,我想从中返回一个DataTable.我知道这往往是一个备受争议的话题,至于返回DataTables是否是一个好习惯.让我们暂时搁置一下.
当我从头开始创建DataTable时,如下所示,没有任何问题.该表已创建,填充并返回给客户端,一切都很好:
[DataContract]
public DataTable GetTbl()
{
DataTable tbl = new DataTable("testTbl");
for(int i=0;i<100;i++)
{
tbl.Columns.Add(i);
tbl.Rows.Add(new string[]{"testValue"});
}
return tbl;
}
Run Code Online (Sandbox Code Playgroud)
但是,只要我出去打开数据库来创建表,如下所示,我得到一个CommunicationException"底层连接已关闭:连接意外关闭."
[DataContract]
public DataTable GetTbl()
{
DataTable tbl = new DataTable("testTbl");
//Populate table with SQL query
return tbl;
}
Run Code Online (Sandbox Code Playgroud)
该表正在服务器端正确填充.它比我循环并返回的测试表要小得多,并且查询小而快 - 这里没有超时或大数据传输的问题.正在使用相同的功能和DataContracts/ServiceContracts/BehaviorContracts.
为什么填充表的方式对表成功返回有什么影响?