- WPF .NET 4.0 应用程序
- 目前托管在 Citrix 中
- MSSQL 2008 R2 后端
- 数据库大小高达 100 GB
- TSQL 搜索将一次返回 100 个对象并命中 12 个表
- 大多数搜索<1 秒,几乎从未> 10 秒
- TSQL (SP) 更新一次一个
- 读取:写入> 10000:1
- 单个数据库可以有 100 个活动用户,但永远不会超过 10 个活动连接。
- 执行数据加载时,SQL 框仅超过 25%,然后保持在 50% 以下
通过 WCF 移动到客户端服务器。 我的第一个WCF。
- 由于没有网络客户端考虑在内部托管作为服务??
- 稍后将在 Azure 上创建姊妹产品和主机
- 考虑需要会话??
- 如果我想错了,请告诉我
我迷失的地方是操作合同实例化和并发。
对于搜索实例化,我应该去 PerSession 吗? 如果是这样,我应该保持 SQL 连接处于打开状态吗?
更新与搜索不同。 有 6 种不同的更新操作协定(针对不同的数据类型)。 更新一次一个,通过PK,并将命中源表和日志表。 作为单个实例和并发模式多并保留连接可能更有意义? 如果是这样,我是否管理并发?
还有一个批量更新,但我现在愿意将其视为一系列单一更新。
主要目标是数据完整性,然后是可用性,然后是可伸缩性。
我知道可能没有硬性答案。 有什么指示或参考资料吗? 我应该如何进行压力测试? 如何管理和监控流程?
有很多数据要测试,我会报告结果。
找到一个直接解决我问题的博客
WCF 实例化并发和限制第 1 部分
WCF 实例化并发和限制第 2 部分
WCF 实例化并发和限制第 3 部分
每次调用在这些情况下,您可以考虑此实例化模式。
-
如果您的服务是无状态的
-
如果您的服务具有轻量级初始化代码(或根本没有)。
-
如果您的服务是单线程的。
我的方法符合所有这些标准。 创建通道后,InstanceContextMode PerCall 的开销只不过是创建类的实例。 连接到 SQL 的开销也很小,因为它将容纳一个连接池。 我把它弄得太复杂了。
如果有人要补充更多,那么我很乐意接受您的回答。