Недавно я создал свой первый сайт на Azure. На данный момент это в основном стандартный веб-сайт MVC4 с контроллерами Home и Account. В Azure у меня есть один веб-сайт и одна база данных SQL. Я могу получить доступ к базе данных SQL Azure из SSMS и настроить имя пользователя и пользователя, которые будут использоваться моим сайтом.
В моей среде разработки, указывая на мою базу данных разработки, я могу получить доступ к странице /Account/Login в порядке. Я могу зарегистрироваться, и я вижу нового пользователя в моем локальном db. Я также могу изменить строку подключения, чтобы указать мой сайт разработки на моем 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 Services. Кроме того, я попытался удалить правило брандмауэра для своей локальной машины для доступа к базе данных SQL Azure, чтобы увидеть, получит ли я подобное исключение, но исключение было очень очевидно связано с брандмауэром.
Я также попытался добавить строку соединения SQL Azure через портал Azure Management (хотя я не видел, как указать провайдера) - само собой разумеется, я получил тот же "Формат инициализации...", исключение, упомянутое выше.
Моя строка подключения в файле 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" />
Любые предложения были бы очень желанными.