0

众所周知,WCF 服务可以以几种不同的模式(PerCall、、实例上下文模式)PerSession进行实例化。Single开发人员通常将服务实现为单例。谈到 IIS 托管的 WCF 服务,有没有办法研究创建了多少服务实例,跟踪它们的生命周期以比较不同的实现方法和性能?

4

2 回答 2

2

有什么方法可以研究创建了多少服务实例,跟踪它们的生命周期

我可以想到两种方法:

  1. IInstanceProvider扩展点使您能够GetInstance()通过和 ReleaseInstance()方法直接管理服务实例的生命周期。您可以创建此扩展的自定义实现来执行您请求的测量(但它还必须正确创建服务实例)。这将给出非常准确的测量结果。请注意,InstanceContextMode.Single它实际上并没有使用IInstanceProvider实现。单例直接传递给 ServiceHost 构造函数。所以IInstanceProvider只会给你PerCallPerSession信息。

  2. ServiceModel 服务性能计数器提供您正在寻找的许多统计信息,例如实例数和呼叫持续时间这些计数器可以快速配置,并且在许多情况下足以看到实例模型之间的性能差异。请注意,这些计数器实际上是在查看 ServiceHost 的 InstanceContext 计数,而不是实际的服务实例计数。InstanceContext 和服务实例之间通常存在一对一的映射关系。但是,如果您使用的是 Unity 或 Castle Windsor 等依赖注入引擎的 WCF 扩展,它们将提供 IInstanceProvider 实现,允许您更改一对一映射。

如果你选择#1,那么网络上有很多示例IInstanceProvider实现,但我会从 Carlos Figueira 的博客开始 - IInstanceProvider

于 2013-10-14T04:57:11.990 回答
0

您必须检查 WCF 消息检查器。看看这个http://code.msdn.microsoft.com/Capturing-WCF-Request-d168060d

使用消息检查器,您可以获得详细的 abt 请求生命周期、请求计数器、当任何 WCF 操作花费超过指定秒数时捕获转储。我想这会帮助你。

于 2013-10-12T18:31:44.430 回答