Microsoft Docs によると、HTTP.sys はポート共有をサポートしていると書いてある。
ただ肝心のやり方が載ってない。 見つけられないだけかも? だけど推測はできる。 おそらく、重複しない URL プレフィックスを指定してやればいいんだろう。
HTTP.sys でホストする最小限の ASP.NET Core アプリで試してみることにした。
using Microsoft.AspNetCore; using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Server.HttpSys; namespace PortSharingSample.Foo { public class Program { public static void Main(string[] args) { CreateWebHostBuilder(args).Build().Run(); } public static IWebHostBuilder CreateWebHostBuilder(string[] args) => WebHost.CreateDefaultBuilder(args) .UseStartup<Startup>() .UseHttpSys(options => { options.Authentication.Schemes = AuthenticationSchemes.NTLM | AuthenticationSchemes.Negotiate; options.Authentication.AllowAnonymous = true; // prefix を登録する // prefix が重複していなければ、ポートが同じでもホストできる options.UrlPrefixes.Add("http://localhost:5000/Foo"); }); } public class Startup { public void Configure(IApplicationBuilder app, IHostingEnvironment env) { app.Run(async (context) => { await context.Response.WriteAsync("Hello Foo!"); }); } } }
名前空間と登録する URL プレフィックスだけが違う ASP.NET Core アプリをもう 1 つ作成。
using Microsoft.AspNetCore; using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Server.HttpSys; namespace PortSharingSample.Bar { public class Program { public static void Main(string[] args) { CreateWebHostBuilder(args).Build().Run(); } public static IWebHostBuilder CreateWebHostBuilder(string[] args) => WebHost.CreateDefaultBuilder(args) .UseStartup<Startup>() .UseHttpSys(options => { options.Authentication.Schemes = AuthenticationSchemes.NTLM | AuthenticationSchemes.Negotiate; options.Authentication.AllowAnonymous = true; // prefix を登録する // prefix が重複していなければ、ポートが同じでもホストできる options.UrlPrefixes.Add("http://localhost:5000/Bar"); }); } public class Startup { public void Configure(IApplicationBuilder app, IHostingEnvironment env) { app.Run(async (context) => { await context.Response.WriteAsync("Hello Bar!"); }); } } }
実行すると、5000 番のポートを共有して 2 つの ASP.NET Core アプリを起動することができた。
HTTP.sys でのポート共有の方法がドキュメントで見つからなかったけど、 予想通り URL プレフィックスを登録することで上手く動いた。 予想通りだったとはいえ、こういうのはちゃんと試しておくのが大事。