asp.net-core - 在 IIS 中托管时 TCP 连接被拒绝
问题描述
我有一个 ASP.NET Core 网站,它在 8801 端口上侦听正常的 HTTP 请求。该程序还在 8803 端口上侦听 MQTT TCP 连接。
如果我直接在服务器上使用 Kestrel 运行程序,如下所示:
dotnet MyWebsite.dll # runs the command on the server
我可以成功地将远程 8803 端口与我的客户端连接起来。所以如果我理解正确:
- 使用 Kestrel 时 MQTT 服务器可以正常工作。
- 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 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。
我正在使用 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>();
HTTP 网站运行良好 (8801)。
在 IIS 中托管时,我无法连接到 MQTT 服务器 (8803)。
所以我的问题是:为什么会这样?如何使用 IIS 托管程序?
如果您需要更多信息,请告诉我。
解决方案
我建议您可以尝试使用另一种方式来创建 MSQT 服务器,并确保您已打开正确的端口以允许访问。
启动.cs:
var mqttServerOptions = new MqttServerOptionsBuilder() .WithDefaultEndpointPort(1883) .Build(); services .AddHostedMqttServer(mqttServerOptions) .AddMqttConnectionHandler() .AddConnections() .AddMqttTcpServerAdapter();
推荐阅读
- python - 在numpy中按索引选择
- javascript - Vuex ORM 与带有附加属性的数据透视表的多对多关系
- ios - AVPlayer 加载 gif 直到加载视频的第一帧
- python - 如何使有条件的while循环重复该过程n次?
- reactjs - React app / Chrome Dev Tools 奇怪的输出:“in Startnull”-main.js:42
- angular - 在 Angular 中,我可以将组件发出的输出直接绑定到属性吗?
- php - iOS 未打开我的 https:// 网站 SSL 证书
- c - strlen-avx2.S 的位置 & 帮助重新创建 strlwr()
- css - 如何修复下拉菜单悬停不工作
- c# - 使用 GetEncoder() 需要什么参考资料?