我最近遇到过Instance Deactivation
这个词。
a)那是什么?
b)我们需要什么?
c)在什么情况下会有用?
我正在寻找一个简单的答案,这个答案可能很容易找不到,如果可以使用一些伪代码。
由于
答案 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答案中的链接提供了很好的参考。