2010-12-14 72 views
0

我正在使用jQuery來調用PageMethods。對於某些操作,當前的用戶憑證必須經過驗證,對於其他操作,我需要調用其他靜態方法。下面是一些示例代碼:是否在靜態PageMethod線程安全內部創建類的實例?

樣品#1

[WebMethod] 
public static void PostComment(string comment) 
{ 
    UserAuth auth = new UserAuth(); 
    if (auth.isAuthenticated) 
     { 
      //Post comment here... 
     } 
} 

樣品#2

[WebMethod] 
public static string GetComment(int commentId) 
{ 

    commentDto comment = //get comment data from the database... 
    string friendlyDate = ConvertFriendlyDate(comment.commentDate); 

    return friendlyDate + " " + comment.text; 
} 

public static string ConvertFriendlyDate(DateTime commentDate) 
{ 
    string friendlyDate = //call static utility method to convert date to friendly format 

    return friendlyDate; 

} 

將使用這些類型的操作我是安全的?

我最好放棄頁面方法,只是爲我的AJAX請求調用一個單獨的ASPX頁面?

+0

如果我從每個需要處理用戶登錄的頁面方法調用通用靜態方法會怎麼樣? – jpshook 2010-12-15 14:13:38

回答

0

你給的例子看起來很好。如果你正在重用一個對象的實例,那麼我會確保該對象是線程安全的。

+0

感謝您的反饋! – jpshook 2010-12-14 15:44:09

0

只要你沒有觸及任何共享資源,它應該是線程安全的。

+0

我已閱讀課本資訊,尋找更多見解。 – jpshook 2010-12-14 15:44:54

1

http://msdn.microsoft.com/en-us/library/system.web.ui.page.aspx

「任何公共static這種類型[頁]的成員(在Visual Basic中的Shared)都是線程安全的。所有實例成員不能保證是線程安全的。」

因此,只要你的靜態方法不觸及類範圍對象,你應該沒問題。例如這可能是壞:

static UserAuth auth; 
[WebMethod] 
public static void PostComment(string comment) 
{ 
    auth = new UserAuth(); 
    if (auth.isAuthenticated) 
     { 
      //Post comment here... 
     } 
} 
+0

Gotcha ..只要一切都是自足的,那麼我應該沒問題。 – jpshook 2010-12-14 15:43:12

0

看看你的類是不可變的是menas如果改變了它會比你不需要擔心線程的問題,新的實例沒有人可以改變它的狀態,但如果你是改變一些共享狀態比你應該考慮同步,但我不認爲你需要任何線程同步在你的情況。

+0

我認爲頁面方法必須是這樣的,但我可能是錯的 – jpshook 2010-12-14 15:42:30

相關問題