WCF OperationContract使用TSQL调优实例和并发

时间:2012-05-24 22:55:27

标签: .net wpf wcf

  • 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上创建一个姐妹产品和主机
  • 想要要求会议?
  • 如果我错了,请告诉我

我迷失的地方是OperationContract Instancing and Concurrency。

对于搜索实例,我应该去PerSession吗?如果是这样,我应该打开SQL连接吗?

更新与搜索不同。有6种不同的更新OperationContracts(针对不同的数据类型)。更新是一次一个,并通过PK,将命中源表和日志表。作为单实例和ConcurrencyMode可能更有意义并保持连接?如果是这样我管理并发?

还有批量更新,但我愿意暂时将其视为一系列单一更新。

主要目标是数据完整性,然后是可用性,然后是可扩展性。

我知道可能没有硬答案。任何指针或参考资料?我该如何进行压力测试?如何管理和监控流程?

要测试大量数据,我会报告结果。

1 个答案:

答案 0 :(得分:1)

找到一个直接解决我的问题的博客

wcf-instancing-concurrency-and-throttling-part-1

wcf-instancing-concurrency-and-throttling-part-2

wcf-instancing-concurrency-and-throttling-part-3

PerCall 在这些情况下,您可以考虑这种实例化模式。

  • 如果您的服务是无国籍的

  • 如果您的服务具有轻量级初始化代码(或根本没有)。

  • 如果您的服务是单线程的。

我的方法符合所有这些标准。创建通道后,InstanceContextMode PerCall的开销不过是创建类的实例。连接到SQL的开销也很小,因为它将保存连接池。我太复杂了。

如果有人要添加更多内容,那么我很乐意接受您的回答。