1
  • 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 和 Concurrency。

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

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

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

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

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

有很多数据要测试,我会报告结果。

4

1 回答 1

1

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

wcf-instance-concurrency-and-throttling-part-1

wcf-instance-concurrency-and-throttling-part-2

wcf-instance-concurrency-and-throttling-part-3

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

  • 如果您的服务是无状态的

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

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

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

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

于 2012-05-25T22:56:52.243 回答