System.Net.Sockets.SocketException (среди прочих), возникающая при использовании Microsoft.AspNetCore.SpaServices (реагировать) в Docker Linux-контейнере и nginx - PullRequest
0 голосов
/ 08 мая 2019

Так что я ценю, что это будет очень непонятная проблема, но я нигде не смог найти ответ.Я использую .Net Core 2.2 и React (проект Visual Studio по умолчанию) и собираю проект в Docker-контейнере Linux и использую nginx в качестве шлюза, однако у меня возникла проблема в разработке, когда не работает горячая перезагрузка, насколько я могу судить по этомуэто потому, что веб-сокеты, которые он должен использовать, не маршрутизируются должным образом.Трек стека, который я получаю, находится ниже.Я также строю множество других проектов, поэтому ошибки могут быть не только для веб-проекта, в основном я не думаю, что исключения SQL имеют какое-либо отношение к веб-проекту.

[40m[32minfo[39m[22m[49m: Microsoft.AspNetCore.SpaServices[0]
      > PROJECT.Web@0.1.0 start /app/ClientApp
      > rimraf ./build && react-scripts start

      Starting the development server...

Microsoft.AspNetCore.SpaServices:Information: > PROJECT.Web@0.1.0 start /app/ClientApp
> rimraf ./build && react-scripts start

Starting the development server...
Exception thrown: 'System.Data.SqlClient.SqlException' in Microsoft.EntityFrameworkCore.SqlServer.dll
The thread 66 has exited with code 0 (0x0).
The thread 0x42 has exited with code 0 (0x0).
The thread 65 has exited with code 0 (0x0).
The thread 0x41 has exited with code 0 (0x0).
Exception thrown: 'System.Data.SqlClient.SqlException' in System.Data.SqlClient.dll
Exception thrown: 'System.Data.SqlClient.SqlException' in System.Data.SqlClient.dll
Exception thrown: 'System.Data.SqlClient.SqlException' in System.Data.SqlClient.dll
Exception thrown: 'System.Data.SqlClient.SqlException' in Microsoft.EntityFrameworkCore.Relational.dll
Exception thrown: 'System.Data.SqlClient.SqlException' in Microsoft.EntityFrameworkCore.SqlServer.dll
The thread 76 has exited with code 0 (0x0).
The thread 0x4c has exited with code 0 (0x0).
[40m[32minfo[39m[22m[49m: Microsoft.AspNetCore.SpaServices[0]

      Files successfully emitted, waiting for typecheck results...

Microsoft.AspNetCore.SpaServices:Information: 
Files successfully emitted, waiting for typecheck results...
Exception thrown: 'System.Net.Internals.SocketExceptionFactory.ExtendedSocketException' in System.Net.NameResolution.dll
Exception thrown: 'System.Data.SqlClient.SqlException' in System.Data.SqlClient.dll
Exception thrown: 'System.Net.Internals.SocketExceptionFactory.ExtendedSocketException' in System.Net.NameResolution.dll
Exception thrown: 'System.Data.SqlClient.SqlException' in System.Data.SqlClient.dll
Exception thrown: 'System.Net.Internals.SocketExceptionFactory.ExtendedSocketException' in System.Net.NameResolution.dll
Exception thrown: 'System.Data.SqlClient.SqlException' in System.Data.SqlClient.dll
Exception thrown: 'System.Net.Internals.SocketExceptionFactory.ExtendedSocketException' in System.Net.NameResolution.dll
Exception thrown: 'System.Data.SqlClient.SqlException' in System.Data.SqlClient.dll
Exception thrown: 'System.Net.Internals.SocketExceptionFactory.ExtendedSocketException' in System.Net.NameResolution.dll
Exception thrown: 'System.Data.SqlClient.SqlException' in System.Data.SqlClient.dll
Exception thrown: 'System.Net.Internals.SocketExceptionFactory.ExtendedSocketException' in System.Net.NameResolution.dll
Exception thrown: 'System.Data.SqlClient.SqlException' in System.Data.SqlClient.dll
The thread 99 has exited with code 0 (0x0).
The thread 0x63 has exited with code 0 (0x0).
Exception thrown: 'System.Net.Internals.SocketExceptionFactory.ExtendedSocketException' in System.Net.NameResolution.dll
Exception thrown: 'System.Data.SqlClient.SqlException' in System.Data.SqlClient.dll
Exception thrown: 'System.Net.Internals.SocketExceptionFactory.ExtendedSocketException' in System.Net.NameResolution.dll
Exception thrown: 'System.Data.SqlClient.SqlException' in System.Data.SqlClient.dll
The thread 107 has exited with code 0 (0x0).
The thread 0x6b has exited with code 0 (0x0).
Exception thrown: 'System.Net.Internals.SocketExceptionFactory.ExtendedSocketException' in System.Net.NameResolution.dll
Exception thrown: 'System.Data.SqlClient.SqlException' in System.Data.SqlClient.dll
The thread 60 has exited with code 0 (0x0).
The thread 0x3c has exited with code 0 (0x0).
Exception thrown: 'System.Net.Internals.SocketExceptionFactory.ExtendedSocketException' in System.Net.NameResolution.dll
Exception thrown: 'System.Data.SqlClient.SqlException' in System.Data.SqlClient.dll
[40m[32minfo[39m[22m[49m: Microsoft.AspNetCore.SpaServices[0]
      Compiled successfully!

Microsoft.AspNetCore.SpaServices:Information: Compiled successfully!
Exception thrown: 'System.Net.Internals.SocketExceptionFactory.ExtendedSocketException' in System.Net.NameResolution.dll
Exception thrown: 'System.Data.SqlClient.SqlException' in System.Data.SqlClient.dll
Exception thrown: 'System.Data.SqlClient.SqlException' in System.Data.SqlClient.dll
Exception thrown: 'System.Data.SqlClient.SqlException' in System.Data.SqlClient.dll
Exception thrown: 'System.Data.SqlClient.SqlException' in System.Data.SqlClient.dll
Exception thrown: 'System.Data.SqlClient.SqlException' in System.Data.SqlClient.dll
Exception thrown: 'System.Data.SqlClient.SqlException' in System.Data.SqlClient.dll
Exception thrown: 'System.Data.SqlClient.SqlException' in System.Data.SqlClient.dll
Exception thrown: 'System.Data.SqlClient.SqlException' in System.Data.SqlClient.dll
Exception thrown: 'System.Data.SqlClient.SqlException' in Microsoft.EntityFrameworkCore.Relational.dll
Exception thrown: 'System.Data.SqlClient.SqlException' in Microsoft.EntityFrameworkCore.SqlServer.dll
Exception thrown: 'System.Data.SqlClient.SqlException' in Polly.dll

Хотя это и неполное представление о стеке дает основную идею ... Я полагаю, что это должно быть связано с запросом websocket, который выполняется за кулисами sock-js

Developer settings

Изначально возникла ошибка до тех пор, пока я не добавил нижеприведенное в свой файл конфигурации nginx

location /sockjs-node {
          proxy_set_header        Host $host;
          proxy_set_header        X-Real-IP $remote_addr;
          proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
          proxy_set_header        X-Forwarded-Proto $scheme;
          proxy_set_header        Upgrade $http_upgrade;
          proxy_set_header        Connection "upgrade";
          proxy_http_version      1.1;
          proxy_buffering         off;

          # Fix the “It appears that your reverse proxy set up is broken" error.
          proxy_pass          http://portal/sockjs-node;
          proxy_redirect      off;
          proxy_read_timeout  90;
      }

, который дает ответ, видимый на изображении devtools, однако горячая перезагрузка не работает.Однажды я нашел исправление для отдельной маршрутизации запросов ws с помощью приведенного ниже в конфигурации

      location /sockjs-node {
          try_files /nonexistent @$http_upgrade;
      }

      location @websocket {
          proxy_set_header        Host $host;
          proxy_set_header        X-Real-IP $remote_addr;
          proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
          proxy_set_header        X-Forwarded-Proto $scheme;
          proxy_set_header        Upgrade $http_upgrade;
          proxy_set_header        Connection "upgrade";
          proxy_http_version      1.1;
          proxy_buffering         off;

          # Fix the “It appears that your reverse proxy set up is broken" error.
          proxy_pass          http://portal/sockjs-node;
          proxy_redirect      off;
          proxy_read_timeout  90;
      }

      location @ {
          proxy_set_header        Host $host;
          proxy_set_header        X-Real-IP $remote_addr;
          proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
          proxy_set_header        X-Forwarded-Proto $scheme;


          # Fix the “It appears that your reverse proxy set up is broken" error.
          proxy_pass          http://portal/sockjs-node;
          proxy_redirect      off;
          proxy_read_timeout  90;
      }

Однако через это я получаю ошибку [emerg] 1#1: "proxy_pass" cannot have URI part in location given by regular expression, or inside named location, or inside "if" statement, or inside "limit_except" block in /etc/nginx/nginx.conf:151 - единственное решение, которое я нашел, этоудалите висящий / из URL proxy_pass, которого у него нет.

Короче говоря, я полностью застрял, кто-нибудь знает, что это за проблема, или может указать мне правильное направление??Дайте мне знать, если вам нужна дополнительная информация.

РЕДАКТИРОВАТЬ: наиболее заметными являются эти исключения, которые продолжают появляться, когда я действительно захожу на веб-страницу в браузере

Exception thrown: 'System.Net.Sockets.SocketException' in Microsoft.AspNetCore.Server.Kestrel.Transport.Sockets.dll
Exception thrown: 'System.IO.DirectoryNotFoundException' in System.Private.CoreLib.dll
...