.NET Framework 2.0에서 실행되는 간단한 ServiceStack 프로젝트가 있습니다. 이것은 Windows에서 잘 작동하지만 Linux에서는 실패합니다. 매우 동일한 코드 (아래 참조).HttpContextAccessor.HttpContext는 Linux에서는 null이고 Windows에서는 ServiceStack.Core가 아닌 null입니다.
서비스는 항상 null이 아니며 (& 리눅스) IHttpContextAccessor
으로 주입되지만 그 속성 인 HttpContext
은 Linux에서는 항상 null이고 Windows에서는 항상 null이 아닙니다.
using Funq;
using Microsoft.AspNetCore;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.DependencyInjection;
using ServiceStack;
namespace TestSS
{
public class Program
{
public static void Main(string[] args)
{
BuildWebHost(args).Run();
}
public static IWebHost BuildWebHost(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseStartup<Startup>()
.Build();
}
public class Startup
{
public void ConfigureServices(IServiceCollection services) { }
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
app.UseDeveloperExceptionPage();
app.UseServiceStack(new AppHost());
}
}
public class AppHost : AppHostBase
{
public AppHost() : base("AO", typeof(InfoService).Assembly) { }
public override void Configure(Container container)
{
var httpContextAccessor = new HttpContextAccessor();
container.Register<IHttpContextAccessor>(httpContextAccessor);
}
}
public class InfoService : Service
{
[Route("/info")] public class InfoRequest { }
private readonly IHttpContextAccessor _accessor;
public InfoService(IHttpContextAccessor accessor)
{
_accessor = accessor;
}
public object Any(InfoRequest request)
{
return $"Accessor: {_accessor};\nContext: {_accessor.HttpContext};";
}
}
}
프로젝트가 리눅스에서 실행하는 방법에 관한 : 없음 리버스 프록시 (의 nginx 등), 단지 dotnet build
dotnet run
다음, 로컬 액세스
최소 프로젝트는 문제를 재현합니다. 공상적이고 아무것도 IMHO가 아닙니다.
승리 : 윈도우 10 기업
리눅스 : 우분투 16.04 LTS
후에 .NET --version : 2.0.2 (두 플랫폼)
추가 조사 :
AppHost.Configure 메서드의 IHttpContextAccessor
등록에 대한 설명은 다음과 같습니다. 이상한 효과 : Windows에서 아무것도 변경되지 않고 모든 것이 예상대로 작동하지만 Linux에서는 종속성을 충족시킬 수 없기 때문에 예외가 발생합니다.
해결 방법, 해결 방법, 모든 정보가 있습니까?
.NET 핵심 호스트를 구성하는 모든 MS/.NET 핵심 종속성은에 등록해야합니다.NET 코어 파이프 라인. 이 [IHttpContextAccessor 발표] (https://github.com/aspnet/Hosting/issues/793)에는 등록 예제가 나와 있습니다. – mythz
부분적으로 사실이지만 Linux에서 실행될 때 기본적으로 등록되지 않지만 Windows에서 실행할 때 기본적으로 등록됩니다. O –
동일한 문제가 있습니다. 공식 ASP.NET 코어 저장소에서도이 문제를 제기 했습니까? – metacircle