Я думаю, что проблема с веб-сервисом связана с многопоточностью. - PullRequest
1 голос
/ 08 марта 2011

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

system.collections.hashtable.insert(Object key, Object nValue, Boolean add)
system.collections.specialized.NameobjectCollectionbase.baseAdd(String name, object value)
SecMan.Getuser(String Username)
Sec.AuthenticationModule.OnAuthenticateRequest(Object source,EventArgs eventArgs)
System.Web.SyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()
System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)

Это происходит только на одном сервере, у всех остальных все в порядке.

Я парень в форме воли и мало что знаю о iis.Код в моем SecMan.DLL выполняется асинхронно, как я подозреваю?Всегда ли это?Если так, то кажется, что на других сайтах чаще бывают проблемы.Я хотел бы придумать определенную причину, прежде чем выкатить какое-то решение, так как это большая проблема.

Спасибо,

1 Ответ

2 голосов
/ 08 марта 2011

Да, веб-приложения (включая веб-службы) работают асинхронно. Если SecMan является одноэлементным, и вы делитесь им по нескольким веб-запросам, вам нужно сделать его безопасным для потоков.

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