You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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的主机头绑定完成需求:

  1. 代码层面配置监听端口:
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();
  1. IIS层面绑定域名:
    • 在IIS中找到gRPC服务对应的站点/应用程序,添加主机头绑定:选择服务器共享IP,端口设置为7153,主机头填写你的目标域名(如yourdomain.com)
    • 配置完成后,该端口只会响应来自此域名的请求,避免与服务器上其他网站冲突

三、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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 23:23:23