Что может помешать службе приложений NodeJS в Azure отправлять ответы в поток событий SSE?

#node.js #azure-web-app-service #server-sent-events #iisnode

#node.js #azure-web-app-service #отправленные сервером события #iisnode

Вопрос:

Мы разработали локальное веб-приложение NodeJS / Express и добавили некоторые новые функции, которые используют события, отправляемые сервером (SSE). При локальном тестировании клиенты могут подключаться к серверу, регистрироваться и получать обновления с сервера через SSE. Однако, когда мы развертываем веб-приложение в Azure, функции, требующие SSE, становятся нефункциональными. Клиенты могут инициировать соединение, но сервер видит соединение, но затем соединение немедленно закрывается, и клиент получает сообщение со статусом 500 / внутренняя ошибка сервера. Сначала мы пытаемся определить точную точку сбоя, а затем как исправить, поскольку мы предполагаем, что что-то в IIS или IISnode обрабатывает ответ.

Мы прошлись по всему Интернету, но, похоже, ничто из того, что мы внедрили, не помогло. Мы перепробовали практически все комбинации конфигураций, которые смогли найти. Я привел соответствующие фрагменты нашего web.config ниже, которые, как мы понимаем, должны передавать управление websocket и связанными с ним транспортами на базовый сервер nodejs, а не предоставлять iis или iisnode обрабатывать это? Мы также включили веб-сокеты и always on в конфигурации, но безрезультатно.

web.config

 <system.webServer>
    <webSocket enabled="false" />
       <handlers>
           <add name="iisnode" path="server.js" verb="*" modules="iisnode" responseBufferLimit="0" />
.
.
.
<iisnode watchedFiles="*.js;node_modules*;routes*.js;views*.jade" flushResponse="true" />
  

Мы ожидаем, что развертывание Azure должно выполняться локально — клиенты, подключенные к серверу, будут получать все широковещательные рассылки через SSE, но вместо этого они просто получают сообщения об ошибках 500 / internal server.

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

1. Какие функции использовали SSE? Не могли бы вы опубликовать зависимости вашего приложения? Я сомневаюсь, что некоторые функции вашего приложения могут конфликтовать с ограничениями веб-приложения Azure.

Ответ №1:

@tbr123psu в вопросе не хватает нескольких деталей, без которых трудно указать правильное направление. Например, я вижу, что вы используете Windows, предлагающую разместить ваше приложение Node, и вы также указали, что код состояния равен 500. Важно знать, каково подстатусное состояние, поскольку оно предоставляет указания на то, где может быть проблема. Посмотрите на это IISNODE http status и Substatus.

ПРИМЕЧАНИЕ: В плане службы приложений Windows IIS используется в качестве базового веб-сервера. Для узла.JS application IIS использует IISNode для обработки запросов.

Кроме того, я бы рекомендовал включить ведение журнала приложения для вашего веб-приложения Azure. Эта опция доступна на портале в разделе Журналы диагностики. Обратитесь к этому: Веб-приложение Azure: как включить диагностику

Обратитесь к этому сообщению в блоге о том, как отлаживать узел.Приложения JS, размещенные в службе приложений Azure: https://azureossd.github.io/2015/08/19/debug-node-js-web-apps-on-azure /

Как только вы включите ведение журнала, отправленные данные укажут вам, что является причиной сбоя.