wsDualHttpBinding使用较大的数据集失败

时间:2010-10-15 16:15:30

标签: wcf dataset wsdualhttpbinding

我在wcf服务中使用wsDualBinding来处理我的软件中的双向通信。一切似乎工作正常,除非我调用方法来获取客户列表。如果在服务中我将查询结果限制为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和其他设置以解决此问题,但无济于事。

感谢您的时间。

1 个答案:

答案 0 :(得分:0)

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

尝试在包含以下内容的配置中添加行为:

<dataContractSerializer maxItemsInObjectGraph="2147483646" />

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