0

我在我的 wcf 服务中使用 wsDualBinding 来处理我的软件中的 2 路通信。一切似乎都很好,除非我调用一个方法来获取客户列表。如果在服务中我将查询结果限制为 2730 条记录,我可以在大约 1-2 秒内获得结果并将它们显示在数据网格中。如果我将结果限制为 2731(另外一个),我会收到以下错误:

http://localhost:8731/Design_Time_Addresses/Dispatch_Studio_Server/DispatchService/在配置的超时 (00:00:59.9990000) 内未收到回复。分配给此操作的时间可能是较长超时的一部分。这可能是因为服务仍在处理操作,或者因为服务无法发送回复消息。请考虑增加操作超时(通过将通道/代理转换为 IContextChannel 并设置 OperationTimeout 属性)并确保服务能够连接到客户端。

在我的研究中,我读到流式传输更适合较大的数据集,因此我还尝试使用流式传输而不是缓冲设置 basicHttpBinding 端点,我得到了基本相同的结果。2730 条记录工作正常,但 2731 条记录给我以下错误。

通过 HTTP 通道传输数据时发生错误(无法从传输连接读取数据:连接已关闭。)。

我不会将 2730 条记录称为大型数据集。这让我相信还有其他原因导致了这个问题。

这是我的客户端配置:

<system.serviceModel>

这是我的服务器配置:

<system.serviceModel>

如您所见,我尝试更改 maxMessageReceivedSize 和其他设置来解决此问题,但无济于事。

谢谢你的时间。

4

1 回答 1

0

除了您永远不应该向客户端发送如此大量的数据(我怀疑客户端会对完整的数据集执行任务)这一事实之外,您可能会达到 MaxSerializedObjectsInGraph 限制。

尝试在您的配置中添加一个行为,其中包含:

<dataContractSerializer maxItemsInObjectGraph="2147483646" />

您还可以考虑使用分页或过滤返回较小的结果集。

于 2010-10-15T16:25:02.270 回答