【问题标题】:Could not resolve DbContext after deployment in Asp.Net Core 2.X在 Asp.Net Core 2.X 中部署后无法解析 DbContext
【发布时间】:2018-12-06 18:04:25
【问题描述】:

我在 asp.net core 2.1 中有一个 webapi,如果我在 Visual Studio 中按 F5,它可以正常工作,我可以点击我的控制器,但是当我将应用程序部署到 IIS 时,它说它可以解决配置方法上的 DbContext。

我的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 下运行 我需要检查其他东西吗?

【问题讨论】:

  • 检查已部署应用程序的 sql server 连接字符串。
  • 它生成相同的 appsettings.json,我没有发现任何错误
  • 您是否使用集成安全性连接到 sql server 或用户 ID 和密码?
  • 集成安全
  • 好的,改成使用用户名/密码,然后试试

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


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多