2011-02-13 98 views
8

我有一些WCF服务。这些服务在ASP.NET中运行。我希望这些服务能够访问静态变量。我的问题是,我不确定适当的服务器级存储机制在哪里。由于速度,我不想使用数据库。但是,我希望静态变量尽可能长时间保持在内存中。事实上,我希望它保持到我重新启动我的服务器,如果可能的话。WCF中的静态变量

任何人都可以提供任何想法吗?

回答

14

您可以在WCF中使用静态变量,但您必须正确同步对它们的访问,因为它们可能会同时从多个线程访问。存储在静态变量中的值可以从AppDomain中的任意位置访问,并保留在内存中直到服务器重新启动。

+0

但是,如何将它们存储在AppDomain中? – user609886 2011-02-13 14:35:15

+1

您可以在某个类中创建一个静态变量,并从服务中访问它。 – 2011-02-13 14:45:40

4

你可能有这样的事情

public static class StaticVariables 
{ 
    private static string _variable1Key = "variable1"; 

    public static Object Variable1 
    { 
     get 
     { 
      return Application[_variable1Key]; 
     } 

     set 
     { 
      Application[_variable1Key] = value; 
     } 
    } 
} 

Application集合本身是线程安全的,但你添加到它的东西可能不是;所以记住这一点。

0

如果所有服务都在一个ServiceContract中,并且您的服务中的所有成员变量都可以在所有会话中共享,则可以将ServiceBehavior设置为single instance

[ServiceBehavior(InstanceContextMode = InstanceContextMode.Single)] 
public class MyService : IMyServiceContract 
{ 
}