私は.NET Core 2.0上で動作する単純なServiceStackプロジェクトを持っています。これはWindowsでは正常に動作しますが、Linuxでは失敗します。非常に同じコードで(下記参照)。HttpContextAccessor.HttpContextはLinuxではnullですが、ServiceStack.CoreのWindowsではnullではありません
サービスは、常にnull以外(ウィン&のLinux)であるが、その性質HttpContext
は、常にWindows上でLinux上のヌルと常に非nullでIHttpContextAccessor
を注入します。
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};";
}
}
}
プロジェクトは、Linux上で実行される方法について::いいえリバースプロキシ(nginxの等)、ちょうどdotnet build
dotnet run
続く、ローカルにアクセス
最小限のプロジェクトは、問題を再現します。何も幻想的ではありません。
勝利:Windowsの10エンタープライズ
のLinux:Ubuntuの16.04 LTS
DOTNETの--version:2.0.2(両方のプラットフォーム)
さらなる調査:
AppHost.ConfigureメソッドのIHttpContextAccessor
登録にはa奇妙な効果:Windowsでは何も変わらず、すべてが期待どおりに機能します.Linuxでは、依存関係が満たされないため例外がスローされます。
誰も解決策、回避策、任意の情報を持っていますか?
.NETコアホストを構成するMS/.NETコアの依存関係は、登録する必要があります。NETコアパイプライン。この[IHttpContextAccessor 発表](https://github.com/aspnet/Hosting/issues/793)に登録例を示します。 – mythz
部分的には、Linuxで動作しているときにはデフォルトでは登録されていませんが、Windowsで実行しているときにはデフォルトで登録されています。O –
同じ問題があります。また、公式ASP.NETコアリポジトリでこの問題を提起しましたか? – metacircle