2009-10-19 59 views
0

我有一個在Web服務器上運行的Web服務,其中一個基於參數(param)的網絡方法(wm) 做了一些處理, 。ASP.NET Web服務 - 基於驗證限制一些併發實例

我只想在某些情況下限制對這個Web方法的併發調用 - 即當 client1傳遞的參數值等於client2傳遞的參數時。

我想在wm的開頭添加一些驗證,以便在處理開始之前檢查條件。

我的問題是:

  1. 我怎樣才能從我的Web方法內找出來,如果有正在執行的Web服務調用相同的Web方法的另一個實例。
  2. 如何在運行時訪問傳遞給webmethod的各種併發實例的參數。

我想避免數據庫日誌記錄,因爲萬一服務器宕機可能不會更新日誌(除非有應對這種可能性的好方法)

回答

0

恕我直言,Web服務應該是無狀態你必須避免做這樣的事情。否則從我的頭(未測試):

[WebMethod] 
public void SomeMethod(string p) 
{ 
    var cache = HttpContext.Current.Cache; 
    // Be careful with the equality comparison here 
    // it might not work with complex types 
    if (cache["param"] == p) 
    { 
     throw new Exception("Another client has called this method with same argument"); 
    } 
    cache["param"] = p; 
    try 
    { 
     // Execute your method here 
    } 
    finally 
    { 
     cache.Remove("param"); 
    } 
} 
+0

非常感謝你達林! – 2009-10-20 20:44:47