IIS部署和运行.NET gRPC服务常见问题
2025-03-25
724 0.NET gRPC 服务可以部署在 IIS(Internet 信息服务)上,但需要满足特定的条件和配置。
1. 环境需要运行 .NET 5 或更高版本,并且操作系统应为 Windows 11(内部版本 22000 及以上)或 Windows Server 2022(内部版本 20348 及以上)。
2. IIS 必须配置为使用 TLS(传输层安全性)和 HTTP/2 协议,因为 gRPC 依赖于 HTTP/2 进行通信。HTTP/2 支持在 Windows 10、Windows Server 2016 及更高版本的操作系统上运行的 IIS 10 或更高版本中可用。IIS 10 默认情况下启用 HTTP/2。
3. ASP.NET Core gRPC 服务可以托管在 .NET Core 支持的所有操作系统上,包括 Windows、Linux 和 macOS。
请注意,macOS 不支持通过 HTTPS 托管 ASP.NET Core 应用。
满足上述条件并正确配置后,您可以在 IIS 上成功部署和运行 .NET gRPC 服务。
IIS部署gRPC服务,客户端调用报错:
Error starting gRPC call. HttpRequestException: An HTTP/2 connection could not be established because the server did not complete the HTTP/2 handshake.
此错误通常由以下原因引起:
- IIS 未正确配置支持 HTTP/2:gRPC 依赖于 HTTP/2 协议进行通信。确保您的 IIS 已启用 HTTP/2 支持。
- 缺少有效的 SSL/TLS 证书:gRPC 通常需要通过 HTTPS(TLS)进行安全通信。如果服务器缺少有效的 SSL/TLS 证书,可能导致握手失败。
- 网络中间件不支持 HTTP/2:如果客户端和服务器之间存在不支持 HTTP/2 的代理、负载均衡器或其他网络设备,可能会导致握手失败。
- 客户端配置不匹配:确保客户端配置与服务器设置一致,特别是关于使用的协议和安全设置。
建议的解决步骤:
- 验证 IIS 的 HTTP/2 配置:检查 IIS 是否已启用 HTTP/2 支持。
- 配置 SSL/TLS 证书:为您的服务器配置有效的 SSL/TLS 证书,确保 HTTPS 通信的正常进行。
- 检查网络中间件:确认所有网络设备和中间件都支持并正确处理 HTTP/2 流量。
- 调整客户端设置:确保客户端的协议和安全设置与服务器配置匹配。
请着重检查第一第二条的配置。如果在完成上述步骤后问题仍未解决,考虑将 gRPC 服务托管为 Windows 服务,而不是通过 IIS 部署。这可以避免与 IIS 配置相关的问题。