【发布时间】:2011-06-26 10:37:14
【问题描述】:
我有一些 WCF 服务。这些服务在 ASP.NET 中运行。我希望这些服务能够访问静态变量。我的问题是,我不确定合适的服务器级存储机制在哪里。由于速度,我不想使用数据库。但是,我希望静态变量尽可能长时间地留在内存中。事实上,如果可能的话,我希望它一直保留到我重新启动服务器为止。
谁能给我一些想法?
【问题讨论】:
我有一些 WCF 服务。这些服务在 ASP.NET 中运行。我希望这些服务能够访问静态变量。我的问题是,我不确定合适的服务器级存储机制在哪里。由于速度,我不想使用数据库。但是,我希望静态变量尽可能长时间地留在内存中。事实上,如果可能的话,我希望它一直保留到我重新启动服务器为止。
谁能给我一些想法?
【问题讨论】:
您可以在 WCF 中使用静态变量,但您必须正确同步对它们的访问,因为它们可能会被多个线程同时访问。存储在静态变量中的值可以从 AppDomain 中的任何地方访问,并保留在内存中,直到服务器重新启动。
【讨论】:
new 非静态类,该类具有静态字段?
你可以有这样的东西
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
{
}
【讨论】: