Не удается получить доступ к базе данных Azure из виртуальной машины Azure, если используется TransactionScope - PullRequest
0 голосов
/ 10 апреля 2019

У меня есть настольное приложение .net 4.6.1, которое переносит БД из «старой» версии в «текущую» версию.

Оно отлично работает, когда я тестирую его локально.Но мне нужно развернуть БД на Azure SQL Server, а затем перенести БД.Я хотел сделать это с виртуальной машины Azure, но я получил следующую ошибку:

System.Data.SqlClient.SqlException (0x80131904): A transport-level error has occurred when receiving results from the server. (provider: TCP Provider, error: 0 - An existing connection was forcibly closed by the remote host.) ---> System.ComponentModel.Win32Exception (0x80004005): An existing connection was forcibly closed by the remote host
   at System.Data.SqlClient.SqlInternalConnectionTds..ctor(DbConnectionPoolIdentity identity, SqlConnectionString connectionOptions, SqlCredential credential, Object providerInfo, String newPassword, SecureString newSecurePassword, Boolean redirectedUserInstance, SqlConnectionString userConnectionOptions, SessionData reconnectSessionData, DbConnectionPool pool, String accessToken, Boolean applyTransientFaultHandling, SqlAuthenticationProviderManager sqlAuthProviderManager)
   at System.Data.SqlClient.SqlConnectionFactory.CreateConnection(DbConnectionOptions options, DbConnectionPoolKey poolKey, Object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningConnection, DbConnectionOptions userOptions)
   at System.Data.ProviderBase.DbConnectionFactory.CreateNonPooledConnection(DbConnection owningConnection, DbConnectionPoolGroup poolGroup, DbConnectionOptions userOptions)
   at System.Data.ProviderBase.DbConnectionFactory.TryGetConnection(DbConnection owningConnection, TaskCompletionSource`1 retry, DbConnectionOptions userOptions, DbConnectionInternal oldConnection, DbConnectionInternal& connection)
   at System.Data.ProviderBase.DbConnectionInternal.TryOpenConnectionInternal(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource`1 retry, DbConnectionOptions userOptions)
   at System.Data.ProviderBase.DbConnectionClosed.TryOpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource`1 retry, DbConnectionOptions userOptions)
   at System.Data.SqlClient.SqlConnection.TryOpenInner(TaskCompletionSource`1 retry)
   at System.Data.SqlClient.SqlConnection.TryOpen(TaskCompletionSource`1 retry)
   at System.Data.SqlClient.SqlConnection.Open()

Я попытался сделать то же самое с локального компьютера, получив доступ к Azure SQL Server с помощью моего инструмента, и это удалось, но когда я попытался сделатьто же самое с виртуальной машины Azure не удалось.Я пытался использовать виртуальные машины Win10, Win Server 2012 и Win Server 2016.

После еще нескольких попыток я заметил, что проблема была вызвана использованием класса TransactionScope.

Мой код:

using (TransactionScope ts = new TransactionScope())
{
    using (SqlConnection connection = new SqlConnection(connectionString))
    {
    connection.Open();
    // some stuff
    }
    ts.Complete();
}

Есть идеи?

...