Websocket с Django Channels и IIS - Не найден маршрут для пути

Я пытаюсь развернуть свое приложение Django на сервере IIS, но мой websocket не работает при доступе через IIS, только локально. Что я упустил?

Когда я получаю доступ через IIS:

new WebSocket('ws://server:8000/ws/notificacoes') -> error 1006 
Log: ValueError: No route found for path 'ws/notificacoes'

Когда я получаю доступ через python runserver:

new WebSocket('ws://http://127.0.0.1:8000/ws/notificacoes') -> connected
Log: WebSocket HANDSHAKING /ws/notificacoes [127.0.0.1:53541]
WebSocket CONNECT /ws/notificacoes [127.0.0.1:53541]

consumers.py

class NotificacaoConsumer(AsyncWebsocketConsumer):
    async def connect(self):
        self.room_group_name = 'notificacoes'

        await self.channel_layer.group_add(
            self.room_group_name,
            self.channel_name
        )

        await self.accept()

    async def disconnect(self, close_code):
        await self.channel_layer.group_discard(
            self.room_group_name,
            self.channel_name
        )

    async def notificacao_update(self, event):
        await self.send(text_data=json.dumps({
            'message': 'Notificação atualizada!'
        }))

routing.py

websocket_urlpatterns = [
    ...
    path('ws/notificacoes', NotificacaoConsumer.as_asgi(), name='notificacao'),
]

asgi.py

from index.routing import websocket_urlpatterns
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "web.settings")
django_asgi_app = get_asgi_application()

application = ProtocolTypeRouter(
    {
        "http": django_asgi_app,
        "websocket": AllowedHostsOriginValidator(
            AuthMiddlewareStack(URLRouter(websocket_urlpatterns))
        ),
    }
)

По совету Лекса Ли я отключил сжатие, перезапустил все соответствующие службы, и все заработало как надо.

Вернуться на верх