WCF中的静态变量

时间:2011-02-13 13:22:00

标签: c# asp.net wcf

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

任何人都可以向我提出任何想法吗?

3 个答案:

答案 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
{
}