众所周知,WCF服务可以在几种不同的模式下实例化(PerCall
,PerSession
,Single
实例上下文模式)。开发人员通常将服务实现为单身人士。谈到IIS托管的WCF服务,有没有办法研究创建了多少服务实例,跟踪他们的生命周期来比较不同的实现方法,性能?
答案 0 :(得分:2)
有没有办法研究服务的实例数 创造,追踪他们的一生
我可以想到两种方法:
IInstanceProvider扩展点使您可以通过GetInstance()
和ReleaseInstance()
方法直接管理服务实例生命周期。您可以创建此扩展的自定义实现来执行您请求的度量(但它还必须正确创建服务实例)。 这样可以提供非常准确的测量结果。请注意,InstanceContextMode.Single
实际上并未使用IInstanceProvider
实施。单例直接传递给ServiceHost构造函数。因此IInstanceProvider
只会向您提供PerCall
和PerSession
信息。
ServiceModel Service Performance Counters提供了您要查找的许多统计信息,例如Instances和Call Duration的数量。 这些计数器配置快速,并且在很多情况下足以看到实例化模型之间的性能差异。请注意,这些计数器实际上是在查看ServiceHost的InstanceContext计数而不是实际的服务实例计数。 InstanceContext和服务实例之间通常存在一对一的映射。但是,如果您正在使用Unity或Castle Windsor等依赖注入引擎的WCF扩展,那么它们将提供一个IInstanceProvider实现,允许您更改一对一映射。
如果你去#1,网上会有许多示例IInstanceProvider
实现,但我会从这开始
Carlos Figueira's Blog – IInstanceProvider
答案 1 :(得分:0)
您必须检查WCF消息检查员。看看这个http://code.msdn.microsoft.com/Capturing-WCF-Request-d168060d
使用Message Inspectors,您可以获取详细信息abt请求生命周期,请求计数器,当任何WCF操作超过指定的秒数时捕获转储。 我想这会帮助你。