0

这是一个涉及 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)在 Publish/Settings/Databases 对话框中设置并选中了“Execute Code First Migrations”。

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

但是,当 Web 应用程序尝试向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,String newPassword,SecureString newSecurePassword,布尔重定向用户实例,SqlConnectionString userConnectionOptions,SessionData reconnectSessionData,DbConnectionPool 池,字符串 accessToken,布尔 applyTransientFaultHandling)+821
系统.Data.SqlClient.SqlConnectionFactory.CreateConnection (DbConnectionOptions options, DbConnectionPoolKey poolKey, Object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningConnection, DbConnectionOptions userOptions) +332
System.Data.ProviderBase.DbConnectionFactory.CreatePooledConnection (DbConnectionPool pool, DbConnection owningObject, DbConnectionOptions options, 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& connection) +426
System.Data.ProviderBase.DbConnectionPool.WaitForPendingOpen() +343
System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务任务)+99
System.Runtime.CompilerServices.TaskAwaiter。HandleNonSuccessAndDebuggerNotification(任务任务)+58
System.Data.Entity.SqlServer.<b__3>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

4

1 回答 1

1

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

所以网络应用程序无法访问正确的 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 应用程序的应用程序设置中设置连接字符串。

在此处输入图像描述

于 2017-09-18T02:12:53.013 回答