我有一個Windows服務,它繼承自MarshalByRefObject
。禁用數據庫寫入空運行
在運行時,該服務會偶爾會收到一個文件,然後:從數據庫
- 讀取數據
- 做計算
- 結果寫入數據庫
我想要實現的功能,我們稱之爲TestRun()
,這可以被遠程調用,它將:
- 讀取數據
- 做計算
- 返回結果給調用者沒有任何內容寫入數據庫
出於顯而易見的原因,我想TestRun()
使用相同的計算程序作爲常規服務,這是充斥着UpdateDatabase()
電話。
這裏是什麼,我現在有一個簡化版本:
static bool commitChanges = true;
public CalcResult TestRun()
{
try
{
commitChanges = false;
return ProcessData();
}
finally
{
commitChanges = true;
}
}
private CalcResult ProcessData()
{
DataModel data = QueryData();
//Note: DoCalculations() calls a bunch of other functions with complex
// objects many of which make multiple calls to UpdateDatabase().
CalcResult result = DoCalculations(dataModel);
return result;
}
private void UpdateDatabase(CalcResult result)
{
if(commitChanges)
{
//Write data to database
}
}
問題是,我敢肯定,如果有人呼籲TestRun()
,而該服務已在處理數據時,它可能是一些真實數據可能無法寫入數據庫。
什麼是更好的方式來禁用查詢測試運行比使用布爾標誌?
Remoting的是保留向後兼容現有的應用程序,因此不建議對新開發的傳統技術。現在應該使用WCF或ASP.NET Web API開發分佈式應用程序。請參閱http://msdn.microsoft.com/en-us/library/vstudio/xws7132e.aspx頂部的註釋以獲取證明。 –
This isnt thread safe .... –
@AK_你讀過這個問題了嗎?這就是整個觀點。 – Dan