我寫了一個WCF服務,但存儲在Service實現中的數據不會在調用之間持續存在,即使存儲在一個靜態變量中。我能做什麼?如何使用內存中持久性存儲編寫WCF服務?
服務實現如下:
public class Storage : IStorage
{
protected static object[] _data;
#region IStorage Members
public void Insert(object[] data)
{
lock (_data)
{
_data = _data.Concat(data).ToArray();
}
}
public object[] SelectAll()
{
lock (_data)
{
return (object[])_data.Clone();
}
}
#endregion
}
服務主機是一個控制檯應用程序:
static void Main(string[] args)
{
ServiceHost serviceHost =
new ServiceHost(typeof(TimeSpanStorage));
serviceHost.Open();
Console.WriteLine("Service running. Please 'Enter' to exit...");
Console.ReadLine();
}
設置情境模式'Single'不一定是做正確的事 - 這不會允許每筆交易的狀態。使用'DurableOperation'是一個更好的選擇。 – 2009-12-01 14:08:24
我同意它不會允許交易控制持久服務。當你想要縮放時,單身模式defo有它的限制。 「數據...不挖牆角調用之間」只是讓我覺得OP是簡單的東西之後。 – MattC 2009-12-01 14:11:44
設置InstanceContextMode爲單是一個可怕的想法 - 你的WCF服務類是單現在,你不已經系列化所有的請求的處理(殺死任何性能),或者你需要處理多線程問題(硬且容易出錯)。最好的選擇是耐用的服務,這種服務真的只是將他們的狀態存儲在一個持久的商店(又名數據庫)中。 – 2009-12-01 14:31:55