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