Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# IIS中承载的WCF服务的生命周期_C#_.net_Wcf_Singleton - Fatal编程技术网

C# IIS中承载的WCF服务的生命周期

C# IIS中承载的WCF服务的生命周期,c#,.net,wcf,singleton,C#,.net,Wcf,Singleton,问题是关于类中的静态数据 如果这是一个服务类,那么我认为实例化模式很重要。 但是如果我有另一个独立的singleton类会发生什么呢 我可以在那里创建一个对象,该对象可用于所有每次调用吗? IIS是否永远在内存中保存该dll,以便单例始终在内存中 如何使某些对象可用于所有WCF客户端调用?是否可以在IIS中执行此操作,还是应该在windows服务中承载WCF服务?将根据您提供的简短上下文提供一些提示 如果您有一个静态类,只要您有权访问同一个WCF代理,该状态就会保持不变。主机(IIS或Wind

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

如果这是一个服务类,那么我认为实例化模式很重要。 但是如果我有另一个独立的singleton类会发生什么呢

我可以在那里创建一个对象,该对象可用于所有每次调用吗? IIS是否永远在内存中保存该dll,以便单例始终在内存中


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

将根据您提供的简短上下文提供一些提示

  • 如果您有一个静态类,只要您有权访问同一个WCF代理,该状态就会保持不变。主机(IIS或Windows服务)并不重要

  • 如果您想跨客户端请求维护“全局静态变量”,为什么不将它们存储在存储库中(文件/数据库/等等)

  • 如果您想保留每个客户端请求的状态,可以查看“持久WCF服务”一试()。我在前面已经使用过它,所以只要您的场景需要类似会话的行为,并且知道性能成本,它就可以工作


希望这有帮助。

检查了我的本地IIS中的问题

这是我的密码

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

    public static int _counter = 0;

    public string GetData()
    {
        _counter++;
        return _counter.ToString();
    }
}
在默认IIS配置下,每个应用程序拉取运行一个进程,此代码按预期工作。结果在每次服务调用中递增

这是有意义的,因为
InstanceContextMode
不管理线程。它仅控制
InstanceContext
生存期的生存期

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

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

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

我没有得到第一点(你到底是什么意思:相同的wcf代理?)第二点,因为我想从db加载一些数据并将其提供给客户端(速度是相关的)。另一方面,据我所知,持久服务使用cookies存储客户端的会话数据。因此,在windows服务中托管wcf是正确的选择吗?@John-在第一点中,我所说的“wcf代理”,是指在客户端创建的用于访问该服务的对象。因此,假设您使用一个WCF代理进行许多服务调用,静态类(在服务器端)将保持不变。除非服务电话是相关的,否则我不会建议这样做。关于第二个问题,我喜欢使用Windows服务来维护全局变量。我以前没用过,但试一下。我知道。谢谢你的建议。