【问题标题】:Error in Azure when a Web App tries to insert into a SQL Server database for the first time after tables created在创建表后第一次尝试插入 SQL Server 数据库时,Azure 中的错误
【发布时间】:2017-09-17 21:19:35
【问题描述】:

这是一个涉及 Azure 与 SQL Server 和 Web 应用程序的问题。

在本地一切正常。该问题仅存在于 Azure 中。

我已经设置了一个带有数据库的 SQL Server,并发布了一个 Web 应用程序。他们使用的是同一个区域。

一切都有默认设置,除了允许我的本地 ip 连接到数据库服务器。

我可以从 SQL Server Management Studio 连接到 Azure SQL Server,并在那里看到我的数据库。

我在网络应用程序中做的第一件事是尝试注册一个新用户。涉及的技术是 ASP.NET MVC5、ASP.NET Identity 和带有迁移脚本的实体框架。普通 MS 的东西。

我在“发布/设置/数据库”对话框中设置了ApplicationDbContext(DefaultConnection),并选中了“执行代码优先迁移”。

迁移脚本运行良好。所有表都已创建并显示在 SQL Server Management Studio 中。

但是当网络应用程序尝试将新用户添加到 User 表时,我收到如下所示的错误。

所以.. Web 应用程序显然具有对数据库的连接和访问权限,因为所有表都已创建。知道我缺少什么吗?

感谢您的帮助和意见!

更新:

在 web.config 中我发现了一个新的 ConnectionString: DefaultConnection_DatabasePublish 配置正确。

原来的DefaultConnection 在发布后不知何故更改Data Source=localhost;Initial Catalog={catalog};Integrated Security=True

将 DefaultConnection 更改为与 DefaultConnection_DatabasePublish 相同解决了问题

我在发布之前没有这种行为。我之前没有检查过“执行代码优先迁移”。有人可以确认该行为是否与此有关?

“/”应用程序中的服务器错误。

系统找不到指定的文件

说明:在执行当前 Web 请求期间发生未处理的异常。请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息。

异常详情:System.ComponentModel.Win32Exception:系统找不到指定的文件

来源错误:

在执行当前 Web 请求期间生成了未处理的异常。可以使用下面的异常堆栈跟踪来识别有关异常起源和位置的信息。

堆栈跟踪:

[Win32Exception (0x80004005): 系统找不到指定的文件]

[SqlException (0x80131904):建立与 SQL Server 的连接时发生与网络相关或特定于实例的错误。服务器未找到或无法访问。验证实例名称是否正确以及 SQL Server 是否配置为允许远程连接。 (提供者:命名管道提供者,错误:40 - 无法打开与 SQL Server 的连接)]

System.Data.SqlClient.SqlInternalConnectionTds..ctor(DbConnectionPoolIdentity 标识,SqlConnectionString connectionOptions,SqlCredential 凭据,对象 providerInfo,字符串 newPassword,SecureString newSecurePassword,布尔重定向用户实例,SqlConnectionString userConnectionOptions,SessionData reconnectSessionData,DbConnectionPool 池,字符串 accessToken,布尔 applyTransientFaultHandling) +821
System.Data.SqlClient.SqlConnectionFactory.CreateConnection (DbConnectionOptions options, DbConnectionPoolKey poolKey, Object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningConnection, DbConnectionOptions userOptions) +332
System.Data.ProviderBase.DbConnectionFactory.CreatePooledConnection(DbConnectionPool 池,DbConnection owningObject,DbConnectionOptions 选项,DbConnectionPoolKey poolKey,DbConnectionOptions userOptions)+38
System.Data.ProviderBase.DbConnectionPool.CreateObject(DbConnection owningObject, DbConnectionOptions userOptions, DbConnectionInternal oldConnection) +699
System.Data.ProviderBase.DbConnectionPool.UserCreateRequest(DbConnection owningObject, DbConnectionOptions userOptions, DbConnectionInternal oldConnection) +89
System.Data.ProviderBase.DbConnectionPool.TryGetConnection(DbConnection owningObject, UInt32 waitForMultipleObjectsTimeout, Boolean allowCreate, Boolean onlyOneCheckConnection, DbConnectionOptions userOptions, DbConnectionInternal& 连接) +426
System.Data.ProviderBase.DbConnectionPool.WaitForPendingOpen() +343
System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务任务)+99
System.Runtime.CompilerServices.TaskAwaiter。 HandleNonSuccessAndDebuggerNotification(任务任务)+58
System.Data.Entity.SqlServer.d__6.MoveNext() +226
System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务任务)+99
System.Runtime.CompilerServices.TaskAwaiter。 HandleNonSuccessAndDebuggerNotification(任务任务)+58
System.Data.Entity.SqlServer.d__9`1.MoveNext() +354
System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务任务)+99
System.Runtime.CompilerServices.TaskAwaiter。 HandleNonSuccessAndDebuggerNotification(任务任务)+58
System.Data.Entity.Core.EntityClient.d__8.MoveNext() +594

【问题讨论】:

    标签: entity-framework-6 azure-web-app-service asp.net-identity-2 azure-sql-database azure-sql-server


    【解决方案1】:

    根据你的描述和错误信息,我猜你没有在web.config中设置正确的连接字符串。

    因此 Web 应用无法访问正确的 sql 数据库。

    我建议您可以尝试使用 kudu 控制台检查 Web 应用是否设置了正确的连接字符串。

    1.打开kudu控制台。

    2.使用调试控制台

    3.找到site\wwwroot文件夹,找到web.config文件。

    点击修改按钮。

    4.然后你可以找到连接字符串。

    用旧的替换正确的连接字符串。

    连接字符串格式如下:

    Server=tcp:{sqlservername}.database.windows.net,1433;Initial Catalog={databasename};Persist Security Info=False;User ID={your_username};Password={your_password};MultipleActiveResultSets=False;Encrypt=True;TrustServerCertificate=False;Connection Timeout=30;
    

    或者您可以直接在 azure web app 的应用程序设置中设置连接字符串。

    【讨论】:

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