【发布时间】:2012-11-08 06:31:22
【问题描述】:
或者 - 至少我认为正确的术语是有状态的。我有一个 wcf 服务,列出了很多数据给我。事实上,数据量如此之大,以至于我超过了 maxrecievedmessagesize - 并且程序崩溃了。
我开始意识到我需要拆分对数据库的调用。我需要获取第 1 - 200 行,而不是检索 5000 行,记住第 200 行的 id,从第 200 行的 id 中获取接下来的 200 行,依此类推。
有人知道怎么做吗?有状态(如“与无状态”相反)是正确的方法吗?我将如何进行……?有人能给我举个例子吗?
【问题讨论】:
-
如果可能的话,服务应该总是无状态。基本上,您的 caller 应该负责指定他想要的行 - 1-100、101-200 等 - 服务本身不需要了解任何有关状态的信息。它只返回客户端请求的那些行。
-
@marc_s 你说得对,服务最好是无状态的,另一方面,将显式行号传递回客户端会暴露服务和底层数据库的大部分内部状态...... ,也应该避免的事情......但是,如果无论如何都返回了整行(带有id),那么你是完全正确的,所以投票给你
-
假设我得到第 1 - 100 行,然后是 101 - 200,如果有人更改第 58 行怎么办?我不会通过使用状态来防止这种情况吗?而且 - 这是解决这类问题的最佳做法吗? (让调用者决定获取第 1 - 100 行,然后是 101 - 200)