2010-12-14 4 views
0

Ich verwende jQuery, um PageMethods aufzurufen. Für bestimmte Vorgänge müssen die aktuellen Benutzeranmeldeinformationen überprüft werden, und für andere Vorgänge muss ich andere statische Methoden aufrufen. Hier ist ein Beispielcode:Erstellt Instanzen einer Klasse in einem statischen PageMethod-Thread-Safe?

Probe # 1

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

Probe # 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; 

} 

Werde ich sicher sein, diese Art von Operationen mit?

Bin es besser, Seitenmethoden zu löschen und nur eine separate ASPX-Seite für meine AJAX-Anfragen aufzurufen?

+0

Was ist, wenn ich eine gemeinsame statische Methode von jeder Seite Methode aufrufen, die es benötigt, die Benutzeranmeldung verarbeitet, wird das threadsicher sein? – jpshook

Antwort

0

Die Beispiele, die Sie gaben, sehen gut aus. Wenn Sie eine Instanz eines Objekts wiederverwenden, würde ich sicherstellen, dass das Objekt Thread-sicher ist.

+0

Danke für die Rückmeldung! – jpshook

0

Solange Sie keine freigegebenen Ressourcen berühren, sollte es threadsicher sein.

+0

Ich habe die Textbuchinfo gelesen, suche nach etwas mehr Einsicht. – jpshook

1

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

"Alle öffentlichen static (Shared in Visual Basic) Member dieses Typs [Seite] sind threadsicher. Bei Instanzmembern ist nicht Thread-sicher sein, sind garantiert."

Solange also Ihre statischen Methoden Klassenobjekte nicht berühren, sollten Sie in Ordnung sein. z.B. Dies könnte schlecht sein:

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

Gotcha .. so lange wie alles in sich abgeschlossen ist, dann sollte ich in Ordnung sein. – jpshook

0

sehen, ob Ihre Klasse unveränderlich ist, dass menas niemand seinen Zustand ändern kann, wenn sie geändert wird es neue Instanz sein wird, als Sie sich nicht um Threadingprobleme kümmern müssen, aber wenn Sie Ändern Sie einen freigegebenen Zustand, als Sie über die Synchronisierung denken sollten, aber ich glaube nicht, dass Sie in Ihrem Fall eine Thread-Synchronisierung benötigen.

+0

Ich denke, Seitenmethoden müssen so sein, aber ich könnte falsch liegen – jpshook