IIS中托管的WCF服务的生命周期

Joh*_*ohn 5 .net c# wcf singleton

问题是关于类中的静态数据.

如果那是一个服务类,那么我认为实例化模式很重要.但是,如果我有另一个独立的单身人士课程,会发生什么?

我可以在那里创建一个可用于所有每次呼叫呼叫的对象吗?IIS是否永远在内存中有这个dll,以便单例将一直在内存中?

如何使某些对象可用于所有WCF客户端调用?是可以在IIS中执行此操作还是应该在Windows服务中托管WCF服务?

Dmi*_*ski 2

检查我本地 IIS 中的问题。

这是我的代码。

[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall)] 
public class Service : IService
{

    public static int _counter = 0;

    public string GetData()
    {
        _counter++;
        return _counter.ToString();
    }
}
Run Code Online (Sandbox Code Playgroud)

使用默认的 IIS 配置,每个应用程序拉取都会运行一个进程,并且此代码按预期工作。每次服务调用时结果都会递增。

这是有道理的,因为InstanceContextMode不管理线程。它只控制InstanceContext生命周期的生命周期。

知道我们仍然不能考虑将静态变量用于可变数据作为最佳实践。IIS 可以配置为“Web Garden”。该配置意味着每个应用程序池允许多个工作进程,并且每个进程都将拥有自己的静态变量副本。

http://www.iis.net/ConfigReference/system.applicationHost/applicationPools

如何使某个对象可供所有 WCF 客户端调用使用?是否可以在 IIS 中执行此操作,或者我应该在 Windows 服务中托管 WCF 服务?

对象应该存储在持久存储中,例如数据库或分布式缓存。IIS 仍然是一个伟大的服务主机,它提供了 Windows 服务可以做的一切以及更多。