WCF 操作协定优化实例化和与 TSQL 的并发


  • 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 的开销也很小,因为它将容纳一个连接池。 我把它弄得太复杂了。

如果有人要补充更多,那么我很乐意接受您的回答。

最新更新