HttpContext имеет значение NULL при запуске веб-приложения в IIS

У меня есть два приложения, оба работают на одном компьютере с Windows. Одно приложение - это IdentityServer4, а другое - мое собственное веб-приложение (приложение Blazor на стороне сервера).

Оба веб-приложения созданы с использованием .NET Core 3.1.

Когда я перехожу в свое веб-приложение, я сначала перенаправляюсь в свое приложение IdentityServer4. Я вхожу в систему, и после этого меня перенаправляют обратно в свое веб-приложение.

Вход в систему прошел успешно, поскольку в логах IdentitServer нет ошибок. Кроме того, я вижу определенное значение claim на моей веб-странице Blazor. Я показываю это с claim по CascadingAuthenticationState на моей странице Blazor. По этому пути все работает нормально.

Но всякий раз, когда я пытаюсь получить авторизованного пользователя через HttpContext в моих файлах «кода программной части», я получаю обратно нулевую ссылку. Например:

public UserService(IHttpContextAccessor httpContextAccessor)
{
    // HttpClient is NULL...
    var httpCtx = _httpContextAccessor.HttpClient;  
}

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

Но почему-то HttpContext становится NULL, когда я запускаю приложение из IIS.

Как я могу решить эту проблему?


person Vivendi    schedule 30.12.2019    source источник
comment
Со мной это тоже дважды случалось. Не уверен, применимы ли они к вам, но, возможно, это окажется полезным. Во-первых, убедитесь, что вы включили WebSockets в IIS. Во-вторых, если ваше приложение использует app.UseAuthentication - что, скорее всего, так и есть, - убедитесь, что он находится в правильном порядке, как описывает его Microsoft здесь.   -  person Dennis1679    schedule 31.12.2019
comment
@ Dennis1679 Я включил WebSockets в IIS, и, похоже, это помогло! Большое спасибо за это предложение! Не могли бы вы представить это в качестве ответа, чтобы мне было с чем согласиться?   -  person Vivendi    schedule 31.12.2019


Ответы (1)


Если исключение нулевой ссылки HttpContext происходит после развертывания в Службы приложений Azure или IIS, возможно, вы забыли включить WebSockets.

Вот сделка:

Если приложение работает в Windows с IIS: Веб-сокеты должны быть включены.

См. IIS / IIS Экспресс-поддержка.

Похоже, что это предварительное условие, которому вы должны следовать. Я только недавно обнаружил это сам, столкнувшись с той же проблемой и решив опубликовать свое приложение в Azure из Visual Studio. После того, как я это сделал, Visual Studio выдала мне приятное предупреждение, в котором говорилось, что нужно включить протокол WebSockets в службе приложений Azure.

person Dennis1679    schedule 31.12.2019