什么是WCF中的实例停用?

时间:2010-08-30 03:35:34

标签: wcf

我最近遇到过Instance Deactivation这个词。

a)那是什么?

b)我们需要什么?

c)在什么情况下会有用?

我正在寻找一个简单的答案,这个答案可能很容易找不到,如果可以使用一些伪代码。

由于

2 个答案:

答案 0 :(得分:3)

调用WCF方法时,会将其传递给服务实例

实例停用只是指WCF系统处理此实例的时刻。

在Per-Call服务中,每次方法调用后都会发生实例停用。

在每会话服务中,当客户端在代理上调用Close或者达到传输会话的非活动超时时,将发生实例停用。

在Singleton Service中,当服务主机关闭时,将发生实例停用。

您还可以配置各个服务方法以触发实例停用:。

[OperationBehavior(ReleaseInstanceMode = ReleaseInstanceMode.AfterCall)]
 public void MyMethodWhichTriggersAnAutomaticRelease()
 {
     // ...
 }

除此之外,您还可以手动触发服务实例版本:

public void MyMethodWhichTriggersAManualRelease()
{
     OperationContext.Current.InstanceContext.ReleaseServiceInstance();
}

Juval Lowy可以说明您是否应该手动覆盖标准实例停用机制:

  

实例停用是一个   优化技术,和所有   优化技术,你应该   在一般情况下避免它。考虑   仅在使用实例停用后   未能满足您的表现   和可伸缩性目标,当仔细   检查和剖析已经证实   毫无疑问,使用实例   停用将改善   情况。

答案 1 :(得分:1)

基本上我认为调用服务操作的类的实例不会被拆除。如果每次调用激活,则每次调用服务上的操作时都将创建服务类的新实例。方法结束后,将处理该类的实例。

如果您希望以可扩展性为代价提高性能,那么您就不会停用该实例,从而选择不同的实例激活方案。

此MSDN artice:Discover Mighty Instance Management Techniques For Developing WCF Apps以及@SteveCav答案中的链接提供了很好的参考。