0

我正在使用 jQuery 调用 PageMethods。对于某些操作,必须验证当前用户凭据,而对于其他操作,我需要调用其他静态方法。这是一些示例代码:

样品 #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 页面吗?

4

4 回答 4

1

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

“这种类型 [Page] 的任何公共静态(Visual Basic 中的共享)成员都是线程安全的。不保证任何实例成员都是线程安全的。”

因此,只要您的静态方法不触及类范围的对象,您就可以了。例如,这可能很糟糕:

static UserAuth auth;
[WebMethod]
public static void PostComment(string comment)
{
    auth = new UserAuth();
    if (auth.isAuthenticated)
        {
            //Post comment here...
        }
}
于 2010-12-14T15:38:34.677 回答
0

你给出的例子看起来不错。如果您正在重用一个对象的实例,那么我会确保该对象是线程安全的。

于 2010-12-14T15:34:07.807 回答
0

只要您不接触任何共享资源,它就应该是线程安全的。

于 2010-12-14T15:34:52.877 回答
0

看看你的类是否是不可变的,如果它被改变,没有人可以改变它的状态,它将是一个新的实例,你不需要担心线程问题,但是如果你正在改变一些共享状态,那么你应该考虑同步但是我不要认为您的情况需要任何线程同步。

于 2010-12-14T15:39:38.913 回答