2010-12-14 7 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

答えて

0

あなたが与えた例は上手く見えます。オブジェクトのインスタンスを再利用している場合は、オブジェクトがスレッドセーフであることを確認します。

+0

フィードバックいただきありがとうございます! – jpshook

1

「このタイプの[ページ](Visual BasicではShared)のメンバーすべてのパブリックstaticは、スレッドセーフです。インスタンスメンバーの場合は、スレッドセーフであるとは限りません。」

したがって、静的メソッドがクラススコープオブジェクトに触れない限り、あなたはうまくいくはずです。例えばこれは悪いかもしれません:あなたのクラスは、あなたがスレッドの問題を心配する必要はありませんよりも、それは新しいインスタンスになります変更された場合メナス誰がその状態を変更できないように不変である場合は、あなたがしている場合

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

Gotcha ..すべてが自己完結型である限り、私は大丈夫になるはずです。 – jpshook

0

を見ますいくつかの共有状態を変更するのは同期について考えるべきですが、あなたの場合にはスレッド同期が必要ではないと思います。

+0

私はページメソッドがこのようになければならないと思うが、私は間違っている可能性がある – jpshook

関連する問題