(初学者)C#/WCF:套接字连接中止

(初学者)C#/WCF:套接字连接中止,c#,wcf,sockets,net.tcp,C#,Wcf,Sockets,Net.tcp,我正在用C#为Windows创建一个用于远距离管理库存的应用程序 我的客户机-服务器通信正常,我可以交换一些字符串、bool、int等,但我无法从服务器获取数据表或其他类型的对象。目前,我使用数据库中的少量数据进行测试,当客户端调用函数时,服务器设法读取数据,但客户端没有收到函数返回(DataTable) 这是我的错误消息: 套接字连接已中止。这可能是由于处理消息时出错、远程主机超过接收超时或基础网络资源问题造成的。本地套接字超时为“00:00:59.2590000” 我的主人: NetTcpB

我正在用C#为Windows创建一个用于远距离管理库存的应用程序

我的客户机-服务器通信正常,我可以交换一些字符串、bool、int等,但我无法从服务器获取数据表或其他类型的对象。目前,我使用数据库中的少量数据进行测试,当客户端调用函数时,服务器设法读取数据,但客户端没有收到函数返回(DataTable)

这是我的错误消息:

套接字连接已中止。这可能是由于处理消息时出错、远程主机超过接收超时或基础网络资源问题造成的。本地套接字超时为“00:00:59.2590000”

我的主人:

NetTcpBinding netTcpBinding = new NetTcpBinding();
netTcpBinding.MaxBufferSize = 10000000;
netTcpBinding.MaxReceivedMessageSize = 10000000;
netTcpBinding.CloseTimeout = TimeSpan.FromMinutes(10);
netTcpBinding.SendTimeout = TimeSpan.FromMinutes(10);
ServiceHost host = new ServiceHost(typeof(ServiceWCF));
host.AddServiceEndpoint(typeof(ISLM_serviceContract),
                    netTcpBinding,"net.tcp://localhost:10108/SLM_WCF");
host.Open();
如有任何建议,我们将不胜感激。
提前感谢

停止使用
数据表
。是的,真的:使用它们很痛苦,为什么还要麻烦呢?最重要的是,你不需要很强的打字能力

更严重的是,这是因为WCF需要事先知道消息的格式,而松散类型的值与默认序列化程序(
DataContractSerializer
)无关

因此,您可以将序列化程序切换到
NetDataContractSerializer
,它应该能够处理这种情况(我从未使用
DataTable
测试过它,但我认为它可以工作)


或者更好的解决方案:创建一个自己的对象(强类型),表示一行并返回该行的列表。

虽然我非常同意@Lucas point,但为了避免在
WCF
中使用
DataTable
,我建议可能的解决方案,如果出于某些原因必须使用
DataTable
。 由于将
TimeOut
MessageSize
设置为非常大的数字,我怀疑这实际上是消息序列化的问题。特别是,如果在创建数据表时未设置其名称,则会出现此问题

public DataTable MyServiceMethod()
{
   DataTable dataTable = new DataTable();
   // populate dataTable;
   return dataTable;
}
如果这是您创建数据表的方式,它可能无法序列化,您需要为
dataTable

DataTable dataTable = new DataTable("myDataTable);

请您添加一些代码,如何在
WCF
服务中构建和返回
DataTable
,以及调用
WCF
服务的客户端代码?