使用 UNIX 套接字升级到 ASP.NET Core 2.1 的问题
Issue upgrading to ASP.NET Core 2.1 using UNIX Sockets
将应用程序升级到 ASP.NET Core 2.1 时,UNIX 套接字不再工作,应用程序在启动时抛出未处理的异常:
System.ArgumentException: Only ListenType.IPEndPoint is supported.
如何使用 ASP.NET Core 2.1 在 UNIX 套接字上监听?
在 ASP.NET Core 2.1 中,Kestrel 服务器切换到 "Sockets" 传输实现,它仅支持 IP 套接字。
为了使用 UNIX 套接字,需要使用 "LibUV" 传输实现。
为此,将启动代码更改为 select LibUV 传输:
public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseLibuv()
.UseUrls("http://unix:/var/run/myapi.sock")
.UseStartup<Startup>();
然后更改 csproj 文件以引用 Microsoft.AspNetCore.All
元数据包而不是 .App
元数据包:
<ItemGroup>
<!-- Change to ".All" if this was ".App" -->
<PackageReference Include="Microsoft.AspNetCore.All" />
</ItemGroup>
将应用程序升级到 ASP.NET Core 2.1 时,UNIX 套接字不再工作,应用程序在启动时抛出未处理的异常:
System.ArgumentException: Only ListenType.IPEndPoint is supported.
如何使用 ASP.NET Core 2.1 在 UNIX 套接字上监听?
在 ASP.NET Core 2.1 中,Kestrel 服务器切换到 "Sockets" 传输实现,它仅支持 IP 套接字。
为了使用 UNIX 套接字,需要使用 "LibUV" 传输实现。
为此,将启动代码更改为 select LibUV 传输:
public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseLibuv()
.UseUrls("http://unix:/var/run/myapi.sock")
.UseStartup<Startup>();
然后更改 csproj 文件以引用 Microsoft.AspNetCore.All
元数据包而不是 .App
元数据包:
<ItemGroup>
<!-- Change to ".All" if this was ".App" -->
<PackageReference Include="Microsoft.AspNetCore.All" />
</ItemGroup>