如何在IIS同一域名下托管ASP.NET Core网站与REST服务?
同一IIS域名下部署ASP.NET Core网站与HTTP/1 JSON转码gRPC服务的配置方案
一、项目部署模式选择
- 独立项目模式:将gRPC服务与ASP.NET Core网站拆分为两个独立的ASP.NET Core项目,部署时在IIS中分别配置站点或应用程序
- 合并项目模式:把gRPC转码服务和网站的路由、业务逻辑整合到同一个ASP.NET Core项目,通过不同路由前缀区分访问(例如网站用根路径
/,gRPC转码服务用/grpc前缀)
二、gRPC服务端口与域名绑定配置
你当前使用UseUrls仅能指定监听端口,无法实现域名限制,需结合IIS的主机头绑定完成需求:
- 代码层面配置监听端口:
var builder = WebApplication.CreateBuilder(args); // 注册gRPC及JSON转码服务 builder.Services.AddGrpc().AddJsonTranscoding(); // 配置gRPC服务监听指定HTTPS端口 IPEndPoint ipEndPointHttps = new IPEndPoint(IPAddress.Any, 7153); builder.WebHost.UseUrls($"https://{ipEndPointHttps}"); var app = builder.Build(); // 映射gRPC转码服务路由 app.MapGrpcService<YourGrpcServiceImpl>(); app.Run();
- IIS层面绑定域名:
- 在IIS中找到gRPC服务对应的站点/应用程序,添加主机头绑定:选择服务器共享IP,端口设置为7153,主机头填写你的目标域名(如
yourdomain.com) - 配置完成后,该端口只会响应来自此域名的请求,避免与服务器上其他网站冲突
- 在IIS中找到gRPC服务对应的站点/应用程序,添加主机头绑定:选择服务器共享IP,端口设置为7153,主机头填写你的目标域名(如
三、ASP.NET Core网站端口配置
网站直接绑定80/443端口,结合IIS主机头实现同域名访问:
- 代码层面推荐让IIS接管端口管理(ASP.NET Core默认适配IIS托管端口),也可显式指定:
var builder = WebApplication.CreateBuilder(args); // 注册网站所需服务(示例为Razor Pages) builder.Services.AddRazorPages(); // 可选:显式指定监听80/443端口 // builder.WebHost.UseUrls("http://*:80", "https://*:443"); var app = builder.Build(); app.MapRazorPages(); app.Run();
- IIS层面配置:为网站站点添加主机头绑定,选择共享IP,端口设为80(HTTP)和443(HTTPS),主机头填写同一域名
yourdomain.com
四、Windows Server 2022升级后的适配规划
升级到Windows Server 2022后,IIS原生支持HTTP/2,可直接切换为原生gRPC协议:
- 移除项目中的JSON转码配置,启用原生gRPC over HTTP/2
- 将gRPC服务与网站统一部署在80/443端口,通过路由前缀区分(如gRPC用
/grpc),无需再使用独立端口 - 确保服务器IIS站点绑定中开启HTTP/2协议支持
内容的提问来源于stack exchange,提问作者Exquirentibus
相关产品推荐
相关产品推荐

