Во-первых, прекратите конкатенацию словаря со строкой, так как это означает, что то, что вы храните в коллекции приложений, является результатом Hashtable.ToString()
, который является просто строкой "System.Collections.Hashtable".
Это всего лишь ошибка, ваша большая проблема заключается в том, что вы храните словарь ошибок от конкретной операции в области приложения.
Рассмотрим два человека (Алиса и Боб, просто чтобы быть традиционными), получающих доступ квеб-приложение в то же время.IIS берет два запроса из своей очереди запросов, назначает рабочий поток для обработки каждого из запросов, и пока все в порядке.
Операция Алисы проверяет, что ее учетная запись оплачена.Это не так, создается таблица ошибок, мы добавляем ошибку с описанием «Учетная запись не оплачена» и присваиваем ее переменной приложения.
Тем временем операция Боба пытается создатьделовая встреча, но он допустил ошибку и установил ее на последний месяц, поэтому ошибка, в которой говорится, что «вы не можете создать деловую встречу в прошлом», присваивается новой таблице ошибок и присваивается переменной области приложения.
Это происходит примерно в одно и то же время, так что это практически случайно относительно того, что сейчас находится в таблице ошибок.
Алиса теперь представлена с сообщением об ошибке.Может быть, это правильный, или, может быть, его бессмыслица о деловых встречах в прошлом, которые ничего не значат для нее.Есть хороший шанс, что Алиса жалуется на технику.
Тем временем Бобу также выдается сообщение об ошибке.Может быть, это правильный, или, может быть, его жалобы, что он не оплатил свои счета, когда он знает за факт, что у него есть.Есть хороший шанс, что Боб жалуется на выставление счетов или его прямое обращение в компанию, управляющую веб-сайтом.Вероятно, это будет хуже, чем он жаловался технику.
Если вам нужно передать объект на более позднюю часть обработки того же веб-запроса, используйте свойство Items в HttpContext.