Текущий код выполняется в IIS и ASP.NET Веб-сервер, но не IIS Express

#vb.net #iis-express

#vb.net #iis-express

Вопрос:

Недавно установив IIS Express, я надеялся, что это облегчит мне жизнь, но почти сразу столкнулся с проблемой.

Рассмотрим следующее, которое является репрезентативным для некоторого текущего кода:

 Public Shared Function GetServiceId() As String

  Dim principal As MyCustomAuthentication.Principal.MyPrincipal

  principal = CType(Thread.CurrentPrincipal, MyCustomAuthentication.Principal.MyPrincipal)
  .
  .
  .
  .

End Function
  

Запуск кода под ASP.NET С веб-сервером (Cassini) все в порядке, и я вижу этот поток.CurrentPrincipal имеет тип MyCustomAuthentication.Принципал.Мой главный.

Запуск под IIS Express этой же строки вызывает исключение InvalidCastException и проверяет тип, который, как я нахожу, теперь принадлежит System.Безопасность.Принципал.GenericPrincipal, который сбивает с толку, поскольку больше ничего не изменилось.

Я могу подтвердить, что MyCustomAuthentication.Принципал.MyPrincipal реализует IPrincipal и помните, что это живой код, он в данный момент развернут и работает.

Кто-нибудь может пролить свет на то, что здесь происходит?

Комментарии:

1. Вы когда-нибудь решали эту проблему? У меня такая же проблема

2. @LillyPop: Боюсь, я так и не решил эту проблему — думаю, в итоге я использовал полноценный IIS, и он отлично работал (больше года назад, и сейчас я ушел с этой работы).

Ответ №1:

Я думаю, вам нужен HttpContext.Current.Вместо этого пользователь. Идентификатор текущего пользователя не совпадает с идентификатором текущего потока.

Комментарии:

1. Спасибо, Скотт — я попробую, когда вернусь к работе (длинные выходные). Я не понимаю, почему это работает в рабочей среде, но не в IIS Express.

2. Я обновил код, но проблема остается — HttpContext.Current. Пользователь подключается как система. Безопасность. Принципал. GenericPrincipal и я получаю исключение InvalidCastException.