Безопасно ли создавать экземпляры класса внутри статического потока PageMethod? - PullRequest
0 голосов
/ 14 декабря 2010

Я использую 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;

}

Буду ли я в безопасности, используя такие операции?

Лучше ли мне отбрасывать методы страницы и просто вызывать отдельную страницу ASPX для моих запросов AJAX?

Ответы [ 4 ]

1 голос
/ 14 декабря 2010

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

"Любые открытые статические (совместно используемые в Visual Basic) члены этого типа [Страница] являются поточно-ориентированными. Любые члены экземпляра не гарантируются поточно-ориентированными."

Поэтому, пока ваши статические методы не касаются объектов области классов, у вас все будет хорошо.например, это может быть плохо:

static UserAuth auth;
[WebMethod]
public static void PostComment(string comment)
{
    auth = new UserAuth();
    if (auth.isAuthenticated)
        {
            //Post comment here...
        }
}
0 голосов
/ 14 декабря 2010

посмотрите, является ли ваш класс неизменным, чтобы никто не мог изменить его состояние, если оно будет изменено, это будет новый экземпляр, и вам не придется беспокоиться о проблемах с многопоточностью, но если вы изменяете какое-то общее состояние, о чем вам следует подуматьсинхронизация, но я не думаю, что вам нужна какая-либо синхронизация потоков в вашем случае.

0 голосов
/ 14 декабря 2010

Пока вы не затрагиваете какие-либо общие ресурсы, это должно быть поточно-ориентированным.

0 голосов
/ 14 декабря 2010

Примеры, которые вы привели, выглядят хорошо. Если бы вы повторно использовали экземпляр объекта, я бы позаботился о том, чтобы этот объект был потокобезопасным.

...