Rapid SCADA 6.4.1 + MS SQL Server 2005

Стартовая страница Форумы Ошибки в работе Rapid SCADA 6.4.1 + MS SQL Server 2005

Просмотр 7 сообщений - с 1 по 7 (из 7 всего)
  • Автор
    Сообщения
  • #39098
    Andr
    Участник

    Добрый день!
    В прошлом году начали осваивать Rapid SCADA. Вроде более-менее всё получается. Но вот дошли до экспорта в стороннюю БД и столкнулись с проблемой, которую пока решить не удалось.
    Собственно, как указано в заголовке, пользуемся версией 6.4.1. Требуется экспорт данных в стороннюю БД. Так уж вышло, что это MS SQL Sever 2005. При попытке экспорта выдаёт следующее:

    ———————————————————————————
    2025-06-18 13:52:17 Exporter «[1] Цель 1» started
    2025-06-18 13:52:17 Error connecting to DB:
    System.Data.SqlClient.SqlException (0x80131904): A connection was successfully established with the server, but then an error occurred during the pre-login handshake. (provider: SSL Provider, error: 31 — Encryption(ssl/tls) handshake failed)
    —> System.IO.EndOfStreamException: End of stream reached
    at System.Data.SqlClient.SNI.SslOverTdsStream.ReadInternal(Byte[] buffer, Int32 offset, Int32 count, CancellationToken token, Boolean async)
    at System.Data.SqlClient.SNI.SslOverTdsStream.Read(Byte[] buffer, Int32 offset, Int32 count)
    at System.IO.Stream.Read(Span`1 buffer)
    at System.Net.Security.SyncReadWriteAdapter.ReadAsync(Stream stream, Memory`1 buffer, CancellationToken cancellationToken)
    at System.Net.Security.SslStream.EnsureFullTlsFrameAsync[TIOAdapter](CancellationToken cancellationToken, Int32 estimatedSize)
    at System.Runtime.CompilerServices.PoolingAsyncValueTaskMethodBuilder1.StateMachineBox1.System.Threading.Tasks.Sources.IValueTaskSource<TResult>.GetResult(Int16 token)
    at System.Net.Security.SslStream.ReceiveHandshakeFrameAsync[TIOAdapter](CancellationToken cancellationToken)
    at System.Net.Security.SslStream.ForceAuthenticationAsync[TIOAdapter](Boolean receiveFirst, Byte[] reAuthenticationData, CancellationToken cancellationToken)
    at System.Net.Security.SslStream.AuthenticateAsClient(SslClientAuthenticationOptions sslClientAuthenticationOptions)
    at System.Data.SqlClient.SNI.SNITCPHandle.EnableSsl(UInt32 options)
    at System.Data.SqlClient.SNI.SNIProxy.EnableSsl(SNIHandle handle, UInt32 options)
    at System.Data.SqlClient.SqlInternalConnectionTds..ctor(DbConnectionPoolIdentity identity, SqlConnectionString connectionOptions, SqlCredential credential, Object providerInfo, String newPassword, SecureString newSecurePassword, Boolean redirectedUserInstance, SqlConnectionString userConnectionOptions, SessionData reconnectSessionData, Boolean applyTransientFaultHandling, String accessToken)
    at System.Data.SqlClient.SqlConnectionFactory.CreateConnection(DbConnectionOptions options, DbConnectionPoolKey poolKey, Object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningConnection, DbConnectionOptions userOptions)
    at System.Data.ProviderBase.DbConnectionFactory.CreatePooledConnection(DbConnectionPool pool, DbConnection owningObject, DbConnectionOptions options, DbConnectionPoolKey poolKey, DbConnectionOptions userOptions)
    at System.Data.ProviderBase.DbConnectionPool.CreateObject(DbConnection owningObject, DbConnectionOptions userOptions, DbConnectionInternal oldConnection)
    at System.Data.ProviderBase.DbConnectionPool.UserCreateRequest(DbConnection owningObject, DbConnectionOptions userOptions, DbConnectionInternal oldConnection)
    at System.Data.ProviderBase.DbConnectionPool.TryGetConnection(DbConnection owningObject, UInt32 waitForMultipleObjectsTimeout, Boolean allowCreate, Boolean onlyOneCheckConnection, DbConnectionOptions userOptions, DbConnectionInternal& connection)
    at System.Data.ProviderBase.DbConnectionPool.TryGetConnection(DbConnection owningObject, TaskCompletionSource`1 retry, DbConnectionOptions userOptions, DbConnectionInternal& connection)
    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.TryOpen(TaskCompletionSource`1 retry)
    at System.Data.SqlClient.SqlConnection.Open()
    at Scada.MultiDb.DataSource.Connect()
    at Scada.Server.Modules.ModDbExport.Logic.Exporter.Connect()
    ClientConnectionId:422e53c8-6709-40c5-936e-b4a9815ffae3
    2025-06-18 13:52:18 Error connecting to DB:
    System.Data.SqlClient.SqlException (0x80131904): A connection was successfully established with the server, but then an error occurred during the pre-login handshake. (provider: SSL Provider, error: 31 — Encryption(ssl/tls) handshake failed)
    —> System.IO.EndOfStreamException: End of stream reached
    at System.Data.SqlClient.SNI.SslOverTdsStream.ReadInternal(Byte[] buffer, Int32 offset, Int32 count, CancellationToken token, Boolean async)
    at System.Data.SqlClient.SNI.SslOverTdsStream.Read(Byte[] buffer, Int32 offset, Int32 count)
    at System.IO.Stream.Read(Span`1 buffer)
    at System.Net.Security.SyncReadWriteAdapter.ReadAsync(Stream stream, Memory`1 buffer, CancellationToken cancellationToken)
    at System.Net.Security.SslStream.EnsureFullTlsFrameAsync[TIOAdapter](CancellationToken cancellationToken, Int32 estimatedSize)
    at System.Runtime.CompilerServices.PoolingAsyncValueTaskMethodBuilder1.StateMachineBox1.System.Threading.Tasks.Sources.IValueTaskSource<TResult>.GetResult(Int16 token)
    at System.Net.Security.SslStream.ReceiveHandshakeFrameAsync[TIOAdapter](CancellationToken cancellationToken)
    at System.Net.Security.SslStream.ForceAuthenticationAsync[TIOAdapter](Boolean receiveFirst, Byte[] reAuthenticationData, CancellationToken cancellationToken)
    at System.Net.Security.SslStream.AuthenticateAsClient(SslClientAuthenticationOptions sslClientAuthenticationOptions)
    at System.Data.SqlClient.SNI.SNITCPHandle.EnableSsl(UInt32 options)
    at System.Data.SqlClient.SNI.SNIProxy.EnableSsl(SNIHandle handle, UInt32 options)
    at System.Data.SqlClient.SqlInternalConnectionTds..ctor(DbConnectionPoolIdentity identity, SqlConnectionString connectionOptions, SqlCredential credential, Object providerInfo, String newPassword, SecureString newSecurePassword, Boolean redirectedUserInstance, SqlConnectionString userConnectionOptions, SessionData reconnectSessionData, Boolean applyTransientFaultHandling, String accessToken)
    at System.Data.SqlClient.SqlConnectionFactory.CreateConnection(DbConnectionOptions options, DbConnectionPoolKey poolKey, Object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningConnection, DbConnectionOptions userOptions)
    at System.Data.ProviderBase.DbConnectionFactory.CreatePooledConnection(DbConnectionPool pool, DbConnection owningObject, DbConnectionOptions options, DbConnectionPoolKey poolKey, DbConnectionOptions userOptions)
    at System.Data.ProviderBase.DbConnectionPool.CreateObject(DbConnection owningObject, DbConnectionOptions userOptions, DbConnectionInternal oldConnection)
    at System.Data.ProviderBase.DbConnectionPool.UserCreateRequest(DbConnection owningObject, DbConnectionOptions userOptions, DbConnectionInternal oldConnection)
    at System.Data.ProviderBase.DbConnectionPool.TryGetConnection(DbConnection owningObject, UInt32 waitForMultipleObjectsTimeout, Boolean allowCreate, Boolean onlyOneCheckConnection, DbConnectionOptions userOptions, DbConnectionInternal& connection)
    at System.Data.ProviderBase.DbConnectionPool.TryGetConnection(DbConnection owningObject, TaskCompletionSource`1 retry, DbConnectionOptions userOptions, DbConnectionInternal& connection)
    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.TryOpen(TaskCompletionSource`1 retry)
    at System.Data.SqlClient.SqlConnection.Open()
    at Scada.MultiDb.DataSource.Connect()
    at Scada.Server.Modules.ModDbExport.Logic.Exporter.Connect()
    ClientConnectionId:04523a09-c1a2-48d0-b73e-19f85f42e26e

    Пробовали с разными вариантами настроек. Например вот:

    TrustServerCertificate=true;Type System Version=SQL Server 2005;Integrated Security=False;Encrypt=False;

    Насколько мы понимаем, SQL Server не поддерживает современные протоколы типа ssl, поэтому коннекта не случается. Есть ли какая-то возможность устранить данную проблему без замены БД? Отключить шифрование, например. Или ещё как-то.

    #39100
    Mikhail
    Модератор

    Добрый день!
    Сталкивались с подобной ошибкой у клиента. Удалось подключиться на MSSQL 2008 R2 с последними обновлениями, доступными для той версии. При этом Rapid SCADA должна стоять на Windows.

    Т.к. у вас более ранняя версия MSSQL, то его, наверное, потребуется обновить до актуальной версии и перенести БД, чтобы соединение стало возможным. Либо создать отдельную базу на PostgreSQL.

    #39102
    Andr
    Участник

    Примерно к такому же выводу пришли и наши специалисты. Что версия MS SQL должна быть не ниже 2008.
    К сожалению, возможности обновить его нет(
    Как и использовать PostgreSQL. Всё равно нужно будет переносить в MS SQL, на котором работает 1С. Конечная цель работать с этими данными именно в 1С.

    То есть, судя по Вашему ответу и информации, которую я нашёл на форуме, с SQL Server 2005 пожениться никак не выйдет и основным вариантом остаётся API?

    #39148
    Mikhail
    Модератор

    Чтобы соединиться именно с MSSQL 2005, нужно написать какую-то промежуточную программу, используя средства разработки тех лет. Или может быть в самом MSSQL 2005 есть возможность соединиться с другой БД и забрать из неё данные.

    #39160
    Andr
    Участник

    Понятно. Спасибо за ответ. Будем прорабатывать варианты.

    #39203
    qweqweqwe
    Участник

    Добрый день!
    Посмотрите тему https://forum.rapidscada.ru/?topic=rapidscada-%d0%b2%d0%b7%d0%b0%d0%b8%d0%bc%d0%be%d0%b4%d0%b5%d0%b9%d1%81%d1%82%d0%b2%d0%b8%d0%b5-%d1%81-%d1%81%d0%b8%d1%81%d1%82%d0%b5%d0%bc%d0%be%d0%b9-%d0%b8%d0%b7-1%d1%81
    в ней пример взаимодействия как напрямую так и через стороннюю БД.

    #39212
    Andr
    Участник

    Здравствуйте!
    Хорошо, спасибо, будем рассматривать все возможные варианты.

Просмотр 7 сообщений - с 1 по 7 (из 7 всего)
  • Вы должны авторизироваться для ответа в этой теме.