如果使用TransactionScope,则无法从Azure VM访问Azure DB

时间:2019-04-10 12:29:27

标签: c# azure azure-sql-database azure-virtual-machine

我有.net 4.6.1桌面应用程序,可将数据库从“旧”版本迁移到“当前”版本。

当我在本地测试它时,它工作得很好。但是我需要在Azure SQL Server上部署数据库,然后再迁移数据库。我想从Azure VM中执行此操作,但是出现以下错误:

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 VM进行操作时却失败了。我尝试使用Win10,Win Server 2012和Win Server 2016 VM。

经过更多尝试后,我注意到此问题是由使用TransactionScope类引起的。

我的代码是:

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

有什么想法吗?

0 个答案:

没有答案