首页 > 解决方案 > 在 IIS 中托管时 TCP 连接被拒绝

问题描述

我有一个 ASP.NET Core 网站,它在 8801 端口上侦听正常的 HTTP 请求。该程序还在 8803 端口上侦听 MQTT TCP 连接。

如果我直接在服务器上使用 Kestrel 运行程序,如下所示:

dotnet MyWebsite.dll   # runs the command on the server

我可以成功地将远程 8803 端口与我的客户端连接起来。所以如果我理解正确:

  1. 使用 Kestrel 时 MQTT 服务器可以正常工作。
  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 INFO --- MqttFX ClientModel:分配了 ID MQTT_FX_Client 的 MqttClient。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:?] at org.eclipse.paho.client.mqttv3.internal.ClientComms$ConnectBG.run(ClientComms .java:701) ~[org.eclipse.paho.client.mqttv3-1.2.0.jar:?] at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source) ~[?:1.8.0_181] at java.util.concurrent.FutureTask.run(Unknown Source) ~[?:1.8.0_181] at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(Unknown Source) ~[?:1.8.0_181] at java.util . connect(Unknown Source) ~[?:1.8.0_181] at java.net.SocksSocketImpl.connect(Unknown Source) ~[?:1.8.0_181] at java.net.Socket.connect(Unknown Source) ~[?: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 :请验证您的设置(例如代理地址、代理端口和客户端 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 。罐:0_181] at java.net.AbstractPlainSocketImpl.doConnect(Unknown Source) ~[?:1.8.0_181] at java.net.AbstractPlainSocketImpl.connectToAddress(Unknown Source) ~[?:1.8.0_181] at java.net.AbstractPlainSocketImpl.connect (未知来源)~[?:1.8.0_181] at java.net.PlainSocketImpl.connect(未知来源)~[?:1.8.0_181] at java.net.SocksSocketImpl.connect(未知来源)~[?:1.8。 0_181] at java.net.Socket.connect(Unknown Source) ~[?:1.8.0_181] at 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,111 INFO --- ScriptsController :清除控制台。2020-08-06 14:14:08,112 错误 --- BrokerConnectService:AbstractPlainSocketImpl.connectToAddress(Unknown Source) ~[?:1.8.0_181] at java.net.AbstractPlainSocketImpl.connect(Unknown Source) ~[?:1.8.0_181] at java.net.PlainSocketImpl.connect(Unknown Source) ~[? :1.8.0_181] at java.net.SocksSocketImpl.connect(Unknown Source) ~[?:1.8.0_181] at java.net.Socket.connect(Unknown Source) ~[?:1.8.0_181] at 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,111 INFO --- ScriptsController:清除控制台。2020-08-06 14:14:08,112 错误 --- BrokerConnectService:AbstractPlainSocketImpl.connectToAddress(Unknown Source) ~[?:1.8.0_181] at java.net.AbstractPlainSocketImpl.connect(Unknown Source) ~[?:1.8.0_181] at java.net.PlainSocketImpl.connect(Unknown Source) ~[? :1.8.0_181] at java.net.SocksSocketImpl.connect(Unknown Source) ~[?:1.8.0_181] at java.net.Socket.connect(Unknown Source) ~[?:1.8.0_181] at 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,111 INFO --- ScriptsController:清除控制台。2020-08-06 14:14:08,112 错误 --- BrokerConnectService:8.0_181] at java.net.SocksSocketImpl.connect(Unknown Source) ~[?:1.8.0_181] at java.net.Socket.connect(Unknown Source) ~[?:1.8.0_181] at 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,111 INFO --- ScriptsController:清除控制台。2020-08-06 14:14:08,112 错误 --- BrokerConnectService:8.0_181] at java.net.SocksSocketImpl.connect(Unknown Source) ~[?:1.8.0_181] at java.net.Socket.connect(Unknown Source) ~[?:1.8.0_181] at 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,111 INFO --- ScriptsController:清除控制台。2020-08-06 14:14:08,112 错误 --- BrokerConnectService:

实际上,我无法使用普通的 tcp 客户端连接到 server:8803。


  1. 我正在使用 MQTTnet(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. 在 IIS 中托管时,我无法连接到 MQTT 服务器 (8803)。

所以我的问题是:为什么会这样?如何使用 IIS 托管程序?

如果您需要更多信息,请告诉我。

标签: asp.net-coreiistcpserver

解决方案


我建议您可以尝试使用另一种方式来创建 MSQT 服务器,并确保您已打开正确的端口以允许访问。

启动.cs:

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

推荐阅读