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