Статические поля в веб-службе ASP.NET - PullRequest
4 голосов
/ 13 марта 2009

Является ли статическая переменная в веб-службе общей для всех запущенных вызовов веб-службы на сервере?

В моем случае я хочу синхронизацию всего сервера, и я полагаю, что я могу сделать это с помощью одного

private static Object syncHandle = new Object();

Это правильно?

Ответы [ 3 ]

2 голосов
/ 13 марта 2009

Да, они все совместно используются для одного AppDomain, поэтому, как правило, их не следует использовать!

Как правило, их не следует использовать, поскольку они вряд ли будут использоваться надлежащим образом. Кроме того, потому что есть более безопасные альтернативы, такие как HttpContext.Cache или даже состояние сеанса.

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

Кроме того, вы, похоже, имеете в виду веб-службы ASMX, но вам следует указать ASMX или WCF.

1 голос
/ 13 марта 2009

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

1 голос
/ 13 марта 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...