gpt4 book ai didi

sql-server - 无法从 Azure 网站访问 SQL Azure DB,即使本地网站使用相同的连接字符串

转载 作者:行者123 更新时间:2023-12-02 10:19:49 24 4
gpt4 key购买 nike

我最近在 Azure 上建立了我的第一个网站。目前,它基本上只是带有主页和帐户 Controller 的标准 MVC4 模板网站。在 Azure 中,我有一个网站和一个 SQL 数据库。我可以从 SSMS 访问 SQL Azure 数据库,并设置了我的网站使用的登录名和用户。

在我的开发环境中,指向我的开发数据库,​​我可以正常访问/Account/Login 页面。我可以注册,并且可以在本地数据库中看到新用户。我还可以更改连接字符串,将我的开发网站指向 SQL Azure DB,然后我可以再次访问/Account/Login 并注册新用户。然后我可以在 SQL Azure DB 中看到这些新用户。

当我将网站部署到 Azure 时,会出现问题。我有一个与发布设置文件关联的转换配置,当将站点发布到 Azure 时,我可以在输出窗口中看到该转换在部署期间应用。这会将本地开发数据库连接字符串修改为 SQL Azure 连接字符串。我还验证了此 SQL Azure 连接字符串位于实际部署的 web.config 文件中(使用 FileZilla FTP 检索实际部署的 web.config)。我可以在 [mysite].AzureWebsites.net 上访问我的网站主页,但是当我单击登录链接转到/Account/Login 页面时,出现以下错误:

[ArgumentException: Format of the initialization string does not conform to specification starting at index 0.]
System.Data.Common.DbConnectionOptions.GetKeyValuePair(String connectionString, Int32 currentPosition, StringBuilder buffer, Boolean useOdbcRules, String& keyname, String& keyvalue) +5313265
System.Data.Common.DbConnectionOptions.ParseInternal(Hashtable parsetable, String connectionString, Boolean buildChain, Hashtable synonyms, Boolean firstKey) +124
System.Data.Common.DbConnectionOptions..ctor(String connectionString, Hashtable synonyms, Boolean useOdbcRules) +95
System.Data.SqlClient.SqlConnectionString..ctor(String connectionString) +59
System.Data.SqlClient.SqlConnectionFactory.CreateConnectionOptions(String connectionString, DbConnectionOptions previous) +24
System.Data.ProviderBase.DbConnectionFactory.GetConnectionPoolGroup(DbConnectionPoolKey key, DbConnectionPoolGroupOptions poolOptions, DbConnectionOptions& userConnectionOptions) +167
System.Data.SqlClient.SqlConnection.ConnectionString_Set(DbConnectionPoolKey key) +61
System.Data.SqlClient.SqlConnection.set_ConnectionString(String value) +66

System.Data.Entity.Internal.LazyInternalConnection.InitializeFromConnectionStringSetting(ConnectionStringSettings appConfigConnection) +122
System.Data.Entity.Internal.LazyInternalConnection.TryInitializeFromAppConfig(String name, AppConfig config) +32
System.Data.Entity.Internal.LazyInternalConnection.Initialize() +127
System.Data.Entity.Internal.LazyInternalConnection.get_ProviderName() +13
System.Data.Entity.Internal.LazyInternalContext.InitializeContext() +346
System.Data.Entity.Internal.InternalContext.CreateObjectContextForDdlOps() +17
System.Data.Entity.Database.Exists() +36
[MyWebsite].Filters.SimpleMembershipInitializer..ctor() +105

这似乎表明我的连接字符串存在问题,但正如我之前提到的,这个完全相同的连接字符串在我的本地网站上工作。

我认为该问题可能与防火墙相关,但我检查了 Azure 管理门户中的设置,并且应用了 Windows Azure 服务防火墙规则以允许该访问。另外,我尝试删除本地计算机访问 SQL Azure DB 的防火墙规则,看看是否会得到类似的异常,但抛出的异常显然与防火墙相关。

我还尝试通过 Azure 管理门户添加 SQL Azure 连接字符串(尽管我没有看到如何指定提供程序) - 不用说,我得到了相同的“初始化格式...”上面提到的异常。

我在 web.config 中的连接字符串采用以下格式:

<add name="[my connection name]"
connectionString="Server=tcp:abc123.database.windows.net,1433;Database=[my database];User ID=[my login]@abc123;Password=[my password];Trusted_Connection=False;Encrypt=True;Connection Timeout=30;"
providerName="System.Data.SqlClient" />

非常欢迎任何建议。

最佳答案

我终于弄清楚了。直到现在我才意识到 web.config 中有 2 个连接字符串最终部署到 Windows Azure 网站 - 我自己的自定义字符串,还有另一个 DefaultConnection 连接字符串,其格式为:

<add name="DefaultConnection" connectionString="DefaultConnection_ConnectionString" providerName="System.Data.SqlClient" />
  • 显然,这不是一个有效的连接字符串(因此出现上面的格式异常)。当您使用 FTP 从 Azure 网站下载实际的 web.config 时,您可以看到这一点。

此默认连接字符串不在 web.configs 或我的解决方案中的各种转换中的任何位置。查看发布期间的输出窗口,有许多转换应用于 web.config。我已经浏览了在构建/发布周期中生成的文件的各个版本,并且它们中都没有 DefaultConnection 连接字符串,甚至在 obj\Release\Package\PackageTmp\文件夹中也没有。所以我猜测 Web 部署阶段中的某些内容会将其作为 web.config 的最后修改插入。 publishsettings 文件中有一个 MSDeployParameterValue 元素,其中提到了连接字符串和 web.config - 我猜可能是这样。

在 AccountModels.cs 文件中,引用了此 DefaultConnection:

public UsersContext()
: base("DefaultConnection")
{
}

这就是选择特定连接字符串的方式。 将此参数更改为您的自定义连接字符串名称可确保您的自定义数据库用于各种帐户内容,并解决上面看到的格式异常。

关于sql-server - 无法从 Azure 网站访问 SQL Azure DB,即使本地网站使用相同的连接字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14668836/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com