2013-06-28 4 views
0

безопасно ли использовать статические данные в asp.net?статическая проблема с несколькими пользователями/клиентами asp.net

ситуация такова:

счетчик в коде позади докладывает обратно к пользователю на каждом forLoop

так:

<div id="report"></div> 

будет установлен с помощью JQuery Ajax Это потому, что если я добавлю runat="Server" он не будет отображаться до тех пор, пока не пройдут все итерации.

так, используя JQuery, чтобы Тригер [Webmethod] является единственным способом я мог придумать, чтобы обновить содержимое DIV во время работы

поэтому вопрос, если 10 пользователей одновременно запускать WebMethod

static int result=someStaticMethodRandomOutput(); 
[webmethod] 
static void StatMet(object userInput){ 
    return result + intValue() * Convert.ToInt32(userInput); 
} 

static int intValue(){ 
    static int someCalculation=someOtherStaticValFromOtherMethodToReturn; 
    return someClaculation; 
} 

, а на стороне клиента jQueryAjax покажет возвращаемые значения ...

Теперь это правда, что возвращаемое значение или значение результата или некоторые из значений здесь будут доступны всем или некоторым пользователям?

+0

C# не поддерживает статические локальные переменные. – SLaks

ответ

1

Методы страницы ASP.NET AJAX должны быть static. Я думаю, что безопасно (каламбур) сказать, что никогда не бывает ничего безопасного при работе с static, особенно полями static.

+0

(удалено «а», очевидно, что этот тип метода действительно должен быть «статическим»), b: даже если это правда, это не делает его «безопасным», а c: есть разница между статическими * методами * и статические поля * - статические * поля *, безусловно, *** не *** безопасны в asp.net –

+0

Вы не понимаете контекст здесь, ASP.NET AJAX Page Методы отличаются от метода на странице ASP.NET класс. Атрибут '[WebMethod]' в методе - это то, что ASP.NET AJAX использует, чтобы рассматривать его как сценарий invokable. Я обновил свой первоначальный ответ, чтобы включить слово AJAX. Извините за путаницу. –

+0

Я знаком с '[WebMethod]', но я * никогда не видел, чтобы он использовался с 'static', или видел какие-либо ограничения, которые он должен использовать с' static' - можете ли вы быть более конкретным, возможно, с некоторой ссылкой ? –

1

result статическое поле, и действительно разделяется между всеми вызовами - что означает, что результаты во время выполнения может быть очень ненадежными в многопоточной среде, как asp.net; хотя он говорит, что он инициализирован в полевом инициализаторе и не выглядит как, поэтому вы, вероятно, сойдете с рук. Если он не может измениться, добавьте readonly, чтобы сделать это очевидным; если это может изменение, это огромная проблема.

someCalculation не имеет смысла - локальная переменная static отсутствует в C#, и она не будет компилироваться.

+0

ОК, приятно знать, что с помощью Webmethod ** это не обязательно ** для использования модификатора 'static'. второй я выложу новый код, когда я буду конвертировать мою программу, поэтому результат div будет обновляться через пост/вызов Ajax из javascript-триггера, в отличие от первой попытки ('resDiv.InnerText = value;', которая будет отображаться только в конце запроса), так что теперь я попробую следующий вариант для вывода «текущая система« через клиентскую сторону ». –

+0

@AviaAfer хорошо, карл, похоже, не согласен со мной в этом вопросе - я не утверждаю, что был непогрешимым, но я я, конечно, не знаю никаких ограничений; тем не менее, статический или нестатический: это не изменит, как будут выглядеть любые статические * поля *. –

+0

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