我有一些WCF服务。这些服务在ASP.NET中运行。我希望这些服务能够访问静态变量。我的问题是,我不确定适当的服务器级存储机制在哪里。我不想因为速度而使用数据库。但是,我希望静态变量尽可能长时间保留在内存中。事实上,如果可能的话,我希望它能保持到重新启动我的服务器。
任何人都可以向我提出任何想法吗?
答案 0 :(得分:14)
您可以在WCF中使用静态变量,但必须正确地同步对它们的访问,因为它们可能同时从多个线程访问。存储在静态变量中的值可以从AppDomain中的任何位置访问,并在服务器重新启动之前保留在内存中。
答案 1 :(得分:4)
你可以有这样的东西
public static class StaticVariables
{
private static string _variable1Key = "variable1";
public static Object Variable1
{
get
{
return Application[_variable1Key];
}
set
{
Application[_variable1Key] = value;
}
}
}
Application集合本身是线程安全的,但你添加到它的东西可能不是;所以记住这一点。
答案 2 :(得分:0)
如果所有服务都在一个ServiceContract
中,并且您的服务中的所有成员变量都可以在所有会话中共享,那么您可以将ServiceBehavior
设置为single instance
[ServiceBehavior( InstanceContextMode = InstanceContextMode.Single )]
public class MyService : IMyServiceContract
{
}