2011-02-13 133 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 
{ 
}