У меня есть ASP. NET Core веб-сайт, который прослушивает порт 8801 для обычных HTTP-запросов. Эта программа также прослушивает порт 8803 для соединения MQTT TCP.
Если я запускаю программу с Kestrel непосредственно на сервере, как показано ниже:
dotnet MyWebsite.dll # runs the command on the server
Я могу подключить удаленный порт 8803 с мой клиент успешно. Итак, если я правильно понимаю:
- Сервер MQTT работает нормально при использовании Kestrel.
- Порт 8803 не заблокирован брандмауэром.
- 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.
Я использую 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>();
Веб-сайт HTTP работает нормально (8801).
Я не могу подключиться к серверу MQTT (8803) при размещении в IIS.
Итак, мой вопрос: почему это происходит? Как разместить программу в IIS?
Если вам нужна дополнительная информация, дайте мне знать.