2011-06-03 99 views
0

我有一個asp.net webmethod是靜態的,它會刪除用戶的文件在數據庫中的操作。 file_name通過jQuery作爲輸入發送。但是對於數據庫連接,我需要使用靜態DBconnection對象。asp.net jquery ajax - 靜態web方法問題

當多個用戶從UI中刪除自己的文件時,jQuery將會使用同一個靜態方法,它使用單個Static連接對象。 那麼同時出現多個請求,這個刪除只會刪除最後一個(最新的請求)用戶文件從數據庫中刪除嗎?如果是的話,如何在asp.net中使用jquery-ajax來處理這個問題。

如果我說錯了,請拋出一些光線。

[更新] 服務器端代碼:

public static void DeleteAttachment(int fileId, string fileLoc) 
    { 
    SqlDBAccess objDBAccessStat = new SqlDBAccess(); 
    ....... 
    } 
+0

可以提供jqueyr腳本plz – 2011-06-03 09:49:44

+0

jquery腳本工作正常..問題出在服務器端。它使用靜態方法和靜態DBConnection。 – Raghav 2011-06-03 09:57:34

回答

1

顯然,如果你分享多個請求同時存在不是講會發生什麼之間的數據庫連接。這是根據定義undefined

你需要做的是隔離事物(使其成爲非靜態的)或引入一個強制傳入請求無限期等待的鎖(直到操作可用)。

這本身不是特別難,但需要小心,以免引入死鎖。

我建議儘管你不要讓你的方法是靜態的,但是非靜態方法更加獨立並且與它自己的連接對象一起使用將不會容易出現相同的併發問題。

這裏重要的是,當多個用戶碰到該方法時,數據庫連接不是全局共享資源,或者出錯。

只是改變它的東西是這樣的:

static void WebMethod() 
{ 
    using (var conn = ProviderFactory.CreateConnection("connection string goes here")) 
    { 
     conn.Open(); 
     // Do work here 
    } 
} 

有關上述整潔的部分是,你將不會被垃圾郵件與連接的服務器僅僅是因爲連接池是默認啓用的,假設你使用SqlClient數據庫提供程序。但它會給你一個很好的隔離範圍conn做你的數據庫工作。

+0

有沒有辦法使用非靜態方法作爲Web方法,並從Jquery調用它..? – Raghav 2011-06-03 09:55:27

+0

靜態方法可以自己創建實例並對其調用操作。通常這就是你要做的。我甚至不認爲有必要將數據庫連接作爲靜態成員,您可以在需要時創建它。如果你已經在使用'SqlConnection',連接池將在這裏提供幫助? – 2011-06-03 09:57:26

+0

酷哥們..這個作品..即使我的代碼工程..很抱歉。連接字符串在應用程序變量中,並且在嘗試訪問時引發編譯器錯誤。 – Raghav 2011-06-03 10:11:38

3

你可以使用Webservice

$.ajax({ 
    type: "POST", 
    contentType: "application/json; charset=utf-8", 
    url: "WebService.asmx/WebMethodName", 
    data: "{}", 
    dataType: "json" 
}); 

而WebService方法不一定是靜態的。

[System.Web.Script.Services.ScriptService] 
public class WebService : System.Web.Services.WebService 
{ 
    [WebMethod] 
    public void WebMethodName() 
    { 
     //Do your stuff here 
    } 
}