我们正在选择在WCF会话/呼叫之间保存状态的最佳方法。我们发现WCF DurableService符合我们的需求。
我们想知道这对于大量使用是否可行。我们期待1000多个会话,每个会话将持续大约100KB的数据(xml序列化格式),并且要保留复杂对象(只有1个对象)。
鉴于我们的要求,WCF DurableServices是否是正确的解决方案?
答案 0 :(得分:4)
DurableService使用内置的WCF功能,使用BasicHttpContextBinding或WSHttpContextBinding将状态(模块级变量)传递给客户端。持久性机制取决于客户端上的HTTP cookie或用于在调用之间存储序列化数据的soap头。您的平均肥皂消息大小将是100KB加上每次调用时操作参数保持的任何有效负载。您还必须将CanCreateInstance和CompleteInstance语义设计到操作合同和应用程序逻辑中,以正确删除会话有效负载。
考虑到1000+ 并发会话和100KB会话数据的情况,DurableService很可能不会非常高效。默认情况下,启用任何类型会话的WCF服务仅限于16个并发会话。您可以增加该数字但我怀疑您将能够在单个服务器实例上处理1000多个会话。对于那么多会话,您可能需要为多个主机服务器使用基于硬件或软件的负载均衡器,这使得即使在所谓的会话亲和性支持下也可以在生产中维护会话。我建议使用无状态每次调用服务设计,并使应用程序代码负责管理状态。