在Asp.Net Core 2.X中部署后无法解析DbContext

时间:2018-06-27 18:51:12

标签: c# asp.net asp.net-core asp.net-core-2.0 asp.net-core-webapi

我在asp.net core 2.1中有一个webapi,如果我从Visual Studio中按F5键,则可以正常工作,可以打我的控制器,但是当我将该应用程序部署到IIS时,它表示可以解决该问题。 DbContext上的Configure方法。

我的Configure看起来像这样

 public void Configure(IApplicationBuilder app, IHostingEnvironment env, IConfiguration configuration, DocumentDbContext documentContext)
        { …}

在我的ConfigureServices上以这种方式注入dbcontext

container.AddDbContext<DocumentDbContext>(options => options.UseSqlServer(connectionString), ServiceLifetime.Scope);

正如我所说的那样。为了将应用程序部署到IIS,我在Program类上添加了以下信息

 public class Program
    {
        public static void Main(string[] args)
        {
            var host = BuildWebHost(args);

            host.Run();
        }

        public static IWebHost BuildWebHost(string[] args) =>
            WebHost.CreateDefaultBuilder(args)
                .UseKestrel()
                .UseContentRoot(Directory.GetCurrentDirectory())
                .UseIISIntegration()
                .UseStartup<Startup>()
                .Build();
    }

ApplicationPool在No Managed Code下运行  我需要检查其他东西吗?

1 个答案:

答案 0 :(得分:0)

该问题被识别为使用集成安全性的连接字符串,当Web应用程序在应用程序池标识下运行时,该集成字符串在部署为在IIS下运行时不起作用。由于应用程序池标识无权访问数据库,因此连接失败。

建议的解决方法是创建一个新的sql server登录名,将该用户分配给应用程序数据库,更新连接字符串以使用用户名和密码而不是集成安全性。