TCP-соединение отклонено при размещении в IIS - PullRequest
0 голосов
/ 06 августа 2020

У меня есть ASP. NET Core веб-сайт, который прослушивает порт 8801 для обычных HTTP-запросов. Эта программа также прослушивает порт 8803 для соединения MQTT TCP.

Если я запускаю программу с Kestrel непосредственно на сервере, как показано ниже:

dotnet MyWebsite.dll   # runs the command on the server

Я могу подключить удаленный порт 8803 с мой клиент успешно. Итак, если я правильно понимаю:

  1. Сервер MQTT работает нормально при использовании Kestrel.
  2. Порт 8803 не заблокирован брандмауэром.
  3. MQTT TCP-сервер может принимать соединение от моего клиента.

Однако при размещении в IIS (внутри или вне процесса) TCP-сервер больше не работает:

журналы при использовании MQTT.fx:

2020-08-06 14: 14: 03,864 INFO --- BrokerConnectorController: onConnect 2020-08-06 14: 14: 03,865 INFO --- ScriptsController : Очистить консоль. 2020-08-06 14: 14: 03,868 ИНФОРМАЦИЯ --- MqttFX ClientModel: MqttClient с назначенным идентификатором MQTT_FX_Client. 2020-08-06 14: 14: 08,100 ОШИБКА --- MqttFX ClientModel: ошибка при подключении org.eclipse.paho.client.mqttv3.MqttException: невозможно подключиться к серверу в org.eclipse.paho.client.mqttv3.internal. TCPNetworkModule.start (TCPNetworkModule. java: 94) ~ [org.eclipse.paho.client.mqttv3-1.2.0.jar :?] в org.eclipse.paho.client.mqttv3.internal.ClientComms $ ConnectBG.run (ClientComms. java: 701) ~ [org.eclipse.paho.client.mqttv3-1.2.0.jar :?] в java .util.concurrent.Executors $ RunnableAdapter.call (неизвестный источник) ~ [? : 1.8.0_181] в java .util.concurrent.FutureTask.run (Неизвестный источник) ~ [?: 1.8.0_181] в java .util.concurrent.ScheduledThreadPoolExecutor $ ScheduledFutureTask.access $ 201 (Неизвестный источник) ~ [ ?: 1.8.0_181] в java .util.concurrent.ScheduledThreadPoolExecutor $ ScheduledFutureTask.run (Неизвестный источник) ~ [?: 1.8.0_181] в java .util.concurrent.ThreadPoolExecutor.runWorker (Неизвестный источник) [? : 1.8.0_181] на java .util.concurrent.ThreadPoolExecutor $ Worker.run (Неизвестный источник) [?: 1.8.0_181] на java .lang .Thread.run (Неизвестный источник) [?: 1.8.0_181] Вызвано: java. net .ConnectException: В соединении отказано: подключиться к java. net .DualStackPlainSocketImpl.waitForConnect (собственный метод) ~ [ ?: 1.8.0_181] в java. net .DualStackPlainSocketImpl.socketConnect (Неизвестный источник) ~ [?: 1.8.0_181] в java. net .AbstractPlainSocketImpl.doConnect (Неизвестный источник) ~ [?: 1.8.0_181] в java. net .AbstractPlainSocketImpl.connectToAddress (Неизвестный источник) ~ [?: 1.8.0_181] в java. net .AbstractPlainSocketImpl.connect (Неизвестный источник) ~ [?: 1.8. 0_181] в java. net .PlainSocketImpl.connect (Неизвестный источник) ~ [?: 1.8.0_181] в java. net .SocksSocketImpl.connect (Неизвестный источник) ~ [?: 1.8.0_181] в java. net .Socket.connect (Неизвестный источник) ~ [?: 1.8.0_181] в org.eclipse.paho.client.mqttv3.internal.TCPNetworkModule.start (TCPNetworkModule. java: 84) ~ [org.eclipse.paho.client.mqttv3-1.2.0.jar :?] ... 8 подробнее 2020-08-06 14: 14: 08,102 ОШИБКА --- MqttFX ClientModel: проверьте свои настройки (например, адрес брокера, B roker Port & Client ID) и учетные данные пользователя! org.eclipse.paho.client.mqttv3.MqttException: невозможно подключиться к серверу по адресу org.eclipse.paho.client.mqttv3.internal.TCPNetworkModule.start (TCPNetworkModule. java: 94) ~ [org.eclipse.paho. client.mqttv3-1.2.0.jar :?] в org.eclipse.paho.client.mqttv3.internal.ClientComms $ ConnectBG.run (ClientComms. java: 701) ~ [org.eclipse.paho.client.mqttv3 -1.2.0.jar :?] в java .util.concurrent.Executors $ RunnableAdapter.call (Неизвестный источник) ~ [?: 1.8.0_181] в java .util.concurrent.FutureTask.run (Неизвестный источник ) ~ [?: 1.8.0_181] в java .util.concurrent.ScheduledThreadPoolExecutor $ ScheduledFutureTask.access $ 201 (Неизвестный источник) ~ [?: 1.8.0_181] в java .util.concurrent.ScheduledThreadPoolExecutor $ ScheduledFutureTask. (Неизвестный источник) ~ [?: 1.8.0_181] в java .util.concurrent.ThreadPoolExecutor.runWorker (Неизвестный источник) [?: 1.8.0_181] в java .util. concurrent.ThreadPoolExecutor $ Worker.run (Неизвестный источник) [?: 1.8.0_181] в java .lang.Thread.run (Неизвестный источник) [?: 1.8.0_181] Вызвано: java. net. ConnectException: в соединении отказано: подключиться в java. net .DualStackPlainSocketImpl.waitForConnect (собственный метод) ~ [?: 1.8.0_181] в java. net .DualStackPlainSocketImpl.socketConnect (неизвестный источник) ~ [?: 1.8.0_181] в java. net .AbstractPlainSocketImpl.doConnect (Неизвестный источник) ~ [?: 1.8.0_181] в java. net .AbstractPlainSocketImpl.connectToAddress (Неизвестный источник) ~ [?: 1.8. 0_181] в java. net .AbstractPlainSocketImpl.connect (Неизвестный источник) ~ [?: 1.8.0_181] в java. net .PlainSocketImpl.connect (Неизвестный источник) ~ [?: 1.8.0_181] в java. net .SocksSocketImpl.connect (Неизвестный источник) ~ [?: 1.8.0_181] в java. net .Socket.connect (Неизвестный источник) ~ [?: 1.8.0_181] в организации .eclipse.paho.client.mqttv3.internal.TCPNetworkModule.start (TCPNetworkModule. java: 84) ~ [org.eclipse.paho.client.mqttv3-1.2.0.jar :?] ... 8 еще 2020- 08-06 14:14:08 , 111 ИНФОРМАЦИЯ --- ScriptsController: Очистить консоль. 2020-08-06 14: 14: 08,112 ОШИБКА --- BrokerConnectService:

На самом деле, я не могу подключиться к серверу: 8803 с обычным клиентом tcp.

  1. Я использую MQT Tnet (3.0.11) + ASP. NET Core (2.1):

    public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
        WebHost.CreateDefaultBuilder(args)
            .UseKestrel(opts => {
                opts.ListenAnyIP(8803, l => l.UseMqtt());
                opts.ListenAnyIP(8801);
            })
            .ConfigureLogging((hostingContext, logging) =>
            {
                // ...
            })
            .UseStartup<Startup>();
    
  2. Веб-сайт HTTP работает нормально (8801).

  3. Я не могу подключиться к серверу MQTT (8803) при размещении в IIS.

Итак, мой вопрос: почему это происходит? Как разместить программу в IIS?

Если вам нужна дополнительная информация, дайте мне знать.

1 Ответ

1 голос
/ 07 августа 2020

Я предлагаю вам попробовать использовать другой способ создания сервера MSQT и убедиться, что вы открыли правильный порт для разрешения доступа.

Startup.cs:

var mqttServerOptions = new MqttServerOptionsBuilder() .WithDefaultEndpointPort(1883) .Build(); services .AddHostedMqttServer(mqttServerOptions) .AddMqttConnectionHandler() .AddConnections() .AddMqttTcpServerAdapter();
...