我最近在 Azure 上建立了我的第一个网站。目前,它基本上只是带有 Home 和 Account 控制器的标准 MVC4 模板网站。在 Azure 中,我有一个网站和一个 SQL 数据库。我可以从 SSMS 访问 SQL Azure 数据库,并设置了我的网站要使用的登录名和用户。
在我的开发环境中,指向我的开发数据库,我可以正常访问 /Account/Login 页面。我可以注册,并且可以在本地数据库中看到新用户。我还可以更改连接字符串以将我的开发网站指向我的 SQL Azure DB,然后我可以再次访问 /Account/Login 并注册新用户。然后我可以在 SQL Azure DB 中看到这些新用户。
当我将网站部署到 Azure 时,就会出现问题。我有一个与我的 publishsettings 文件关联的转换配置,当将站点发布到 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" />
任何建议都会非常受欢迎。