【发布时间】:2020-11-11 22:06:53
【问题描述】:
我从以下页面在 Visual Studio 2019 中创建了 GrpcGreeter 和 GrpcGreeterClient 项目:
[https://docs.microsoft.com/en-us/aspnet/core/tutorials/grpc/grpc-start?view=aspnetcore-5.0&tabs=visual-studio][1]
我对这些示例所做的唯一更改是,为了让 GrpcGreeter 应用程序作为 Windows 服务运行,我在 IHostBuilder CreateHostBuilder 中添加了“.UseWindowsService()”。我在 VS 中将两者都发布到本地文件夹,并为部署模式选择了自包含。
从 VS 环境运行或直接运行已发布的 GrpcGreeter.exe 和 GrpcGreeterClient.exe 时,服务器和客户端使用 https://localhost:5001 可以正常工作。
然后我使用“Sc create”通过 GrpcGreeter.exe 成功创建了 Windows 服务。然后在“服务”窗口中我启动了该服务。
问题在于,当作为 Windows 服务运行时,GrpcGreeter.exe 不会侦听端口 5001,如 netstat -anb 所示(显然它确实侦听端口 5354)。当然,当我运行 GrpcGreeterClient.exe 时,它不会连接。当 GrpcGreeter.exe 不是作为 Windows 服务运行时,netstat 显示它正在侦听 5001,并且 GrpcGreeterClient.exe 与它对话正常。
每当我在“服务”窗口启动服务时,查看事件查看器会立即出现 3 个错误。我在下面缩写它们。
第一: 错误应用程序名称:GrpcGreeter.exe,版本:1.0.0.0,时间戳:0x5f6b3846 错误模块名称:ntdll.dll,版本:10.0.19041.546,时间戳:0xd49544eb 异常代码:0xc0000374 故障偏移:0x000e6763 ...
第二次: 故障桶,类型0 事件名称:FaultTolerantHeap 回应:不可用 驾驶室编号:0
问题签名: P1:GrpcGreeter.exe ...
第三次: 故障桶2242750238749681031,类型1 活动名称:APPRCASH 回应:不可用 驾驶室编号:0
问题签名: P1:GrpcGreeter.exe ...
请帮忙。谢谢。
【问题讨论】:
-
5354 通常是多播 DNS 响应器,所以我不相信是 your 代码在该端口上监听。
-
同样的问题,我在 EC2 安全组中打开了 5001 端口,但仍然无法从本地连接。但启动服务后windows事件没有错误。有什么线索吗?