В настоящее время у меня есть служба WCF, используемая для выполнения некоторых запросов к базе данных и отправки почты.Короче говоря, оба метода асинхронно используют HttpContext.Current
где-то в своей реализации.
Моя первоначальная проблема заключается в том, что после первого await
, HttpContext.Current
становится нулевым и, следовательно, вторая операция завершается неудачно.Я часами искал в Google и проверял все, что нашел ... Пользовательский контекст синхронизации, appSettings в web.config, таргетинг на .NET 4.5, включение совместимости с ASP.NET, но ничего не получалось.
Затем я обнаружил этот пост , говорящий о CallContext
.По сути, идея заключается в том, чтобы хранить HttpContext.Current
в CallContext
.Я проверил и да, это сработало.Однако, поскольку я точно не знал, что такое CallContext
, я читал об этом.
Я не уверен, что действительно все правильно понял, но после прочтения у меня возникло беспокойство.Я могу ошибаться, но кажется, что нет никакой гарантии, что поток, восстановленный после выполнения асинхронного вызова, совпадает с исходным потоком.Проблема в том, что я храню несколько значений в HttpContext
, и я боюсь, что первый метод будет выполняться со значениями пользователя A, а затем, когда асинхронный вызов будет выполнен, второй метод будет выполняться со значениями пользователя B (какHttpContext
не будет таким же).
Я думаю, у людей будет искушение сказать мне, чтобы я сохранял только эти значения в CallContext
, но я создал целую архитектуру, прежде чем столкнулся с проблемой WCF.поэтому я не хотел бы полностью его пересматривать, поэтому CallContext
пригодится, поскольку изменения незначительны.
Может кто-нибудь сказать мне, верна ли моя теория или нет?