【问题标题】:Static Variables in WCFWCF 中的静态变量
【发布时间】:2011-06-26 10:37:14
【问题描述】:

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

谁能给我一些想法?

【问题讨论】:

    标签: c# asp.net wcf


    【解决方案1】:

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

    【讨论】:

    • 但是如何将它们存储在 AppDomain 中?
    • 您在某个类中创建了一个静态变量,然后从您的服务中访问它。
    • 它是否仅适用于全局静态变量,或者也适用于在处理请求时创建的局部变量,该变量分配有 new 非静态类,该类具有静态字段?
    【解决方案2】:

    你可以有这样的东西

    public static class StaticVariables
    {
        private static string _variable1Key = "variable1";
    
        public static Object Variable1
        {
            get 
            {
                return Application[_variable1Key]; 
            }
    
            set 
            {
                Application[_variable1Key] = value; 
            }
        } 
    }
    

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

    【讨论】:

    • 如何访问“应用程序”变量?我在 Intellisense 中看不到它。
    • 在谈论 .NET 对象(如 Application)时,我会很高兴看到命名空间包含在内,因为有多个命名空间,有些人会感到困惑。
    【解决方案3】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-22
      • 2011-05-30
      相关资源
      最近更新 更多