ModArcMSSql

Просмотр 15 сообщений - с 46 по 60 (из 78 всего)
  • Автор
    Записи
  • #26300
    JurasskPark
    Участник

    [2022-11-28 13:39:20.186] System.Net.Internals.SocketExceptionFactory+ExtendedSocketException (10055): An operation on a socket could not be performed because the system lacked sufficient buffer space or because a queue was full. [::ffff:*.*.*.*]:10000
    at System.Net.Sockets.Socket.DoConnect(EndPoint endPointSnapshot, SocketAddress socketAddress)
    at System.Net.Sockets.Socket.Connect(EndPoint remoteEP)
    at System.Net.Sockets.TcpClient.Connect(IPEndPoint remoteEP)
    at Scada.Client.ClientBase.Connect()
    at Scada.Client.ClientBase.RestoreConnection()
    at Scada.Client.ScadaClient.GetCurrentData(Int32[] cnlNums, Boolean useCache, Int64& cnlListID)
    at Scada.Comm.Drivers.DrvExportDataFromScada.DriverClient.WriteCurrentData()

    Нашёл интересный момент.
    У меня каждую сессию генерируется подключение. Но по прошествии времени сервер говорит, что мол слишком долго твоя сессия и необходимо перезапускать линию и он опять работает. Тоже поставлю перезапуск линии как и @manjey73.
    Но! Собственно DBExport тоже в 5 версии страдал такой проблемой. Так как что нужно Михаилу об этом подумать и обратить внимание. 🙂

    • Ответ изменён 3 года, 8 месяцев назад пользователем JurasskPark. Причина: Удалил IP- адрес сервера
    #26305
    manjey73
    Участник

    Это настройки потустороннего сервера. И перезапускать линию нет необходимости, используйте общую переменную для Линии связи и используйте ее как флаг необходимости авторизоваться.

    В драйвере OwenCloud так сделал.
    Пример есть в драйвере Меркурий для версии 6. там правда для каждого устройства, но это не мешает сделать на линии. Могу кусок кода кинуть

    • Ответ изменён 3 года, 8 месяцев назад пользователем manjey73.
    #26307
    manjey73
    Участник

    У меня линия перезапускалась из других соображений, чтение данных, автоматическое создание шаблона для устройства, перезапуск с новыми данными шаблона и создание каналов.

    У вас другой случай

    #26316
    JurasskPark
    Участник

    Это настройки потустороннего сервера.

    Не совсем понял, что значит настройки потустороннего сервера? 🙂

    P.S. Я из драйвера подключаюсь к серверу SCADA. Оба стоят на одной машине.

    #26320
    manjey73
    Участник

    А ошибку сокета вам кто сообщает?
    Да собственно не важно, если есть пуза на сокет при неактивности, который закрывается, вам и надо это контролировать и просто его открывать снова.

    Перезапускать Линию связи при этом точно не обязательно, достаточно контролировать сокет

    #26323
    JurasskPark
    Участник

    Хм… А ведь точно надо посмотреть и проверить, есть ли эта проверка)

    #26324
    JurasskPark
    Участник

    Короче, у меня написано, что client == null, то делают заново коннект.
    Значит в это условие не попадает…
    Т.к. проверка коннекта происходит 3 секунды, то сделать в коде исключения переподключение если произошла ошибка.
    Главное отловить этот кусок кода.

    #26325
    manjey73
    Участник

    Так вы ошибку получаете, ткнитесь отладчиком где, и можно просто в try завернуть наверное.

    #26328
    JurasskPark
    Участник

    Ошибка происходит через N дней)
    Просто так ткнуть сложно. Это должен быть отладчик неделю запущен)

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

    В случае невозможности подключиться, попробуйте очищать пул соединений SQL-сервера. Перезапускать линию — расписаться в том, что проблема не устранена.

    #26380
    JurasskPark
    Участник

    В случае невозможности подключиться, попробуйте очищать пул соединений SQL-сервера.

    Так проблема в подключении к RapidScada серверу 🙂

    System.Net.Internals.SocketExceptionFactory+ExtendedSocketException (10055): An operation on a socket could not be performed because the system lacked sufficient buffer space or because a queue was full. [::ffff:*.*.*.*]:10000
    at System.Net.Sockets.Socket.DoConnect(EndPoint endPointSnapshot, SocketAddress socketAddress)
    at System.Net.Sockets.Socket.Connect(EndPoint remoteEP)
    at System.Net.Sockets.TcpClient.Connect(IPEndPoint remoteEP)
    at Scada.Client.ClientBase.Connect()
    at Scada.Client.ClientBase.RestoreConnection()
    at Scada.Client.ScadaClient.GetCurrentData(Int32[] cnlNums, Boolean useCache, Int64& cnlListID)
    at Scada.Comm.Drivers.DrvExportDataFromScada.DriverClient.WriteCurrentData()

    5 дней назад запустил… Пока жду новых падений.

    https://www.youtube.com/watch?v=WOdNdjqZ7zM
    Текущая стадия разработки.
    Пока есть тормоза при разворачивании базы, можно всё ускорить, допилить, но пока так.
    Работает расписание задач… Думал использовать в синхронизации, пока писал ролик, опять осознал, что без перезапуска сервера синхронизации не будет… Ну а вдруг у вас коммуникатор будет находится на другом сервере) и не будет перезапускаться. )

    Сейчас делаю так, чтобы в основной базе были данные за месяц, а по расписанию каждый месяц создавалась база historian_data_год_месяц, куда тоже складывались текущие данные, месяц закрылся — база спустя 2 месяца отключается.

    #26381
    manjey73
    Участник

    @JurasskPark У вас же часть данных по ошибке есть, начните с этого. Я обычно при непонимании делаю в коде Log.WriteLine
    А у вас первым идет at System.Net.Sockets.Socket.Connect(EndPoint remoteEP) — Вот где-то там (кто это может вызвать) и заворачивать в try со своим тестом логирования, потом находите где и разбираетесь. Уже отладку натравливать с точкой останова в нужном месте, хотя иногда да, бывает невозможно прицепиться до ошибки

    Проблема может быть не в сервере Scada кстати…

    • Ответ изменён 3 года, 8 месяцев назад пользователем manjey73.
    #26389
    Mikhail
    Модератор

    Возможно, клиентские приложения генерируют слишком много подключений к одному серверу. Не одно какое-то приложение, а несколько приложений на разные порты сервера.

    #29805
    JurasskPark
    Участник

    Восстанавливаю тему. 😀
    https://www.youtube.com/watch?v=RMP2D3e0IBE
    Если коротко, то драйвер был написан, часть функционала уже неактуальна по причине того, что Михаил доделал Export.
    Если коротко, то модуль хранит в БД структуру проекта со всеми записями и позволяет из названия устройства, канал и девайса сделать тег, который позволит другим системам обращаться за данными по названию тегу, а не его номеру.

    Вводная часть закончилась.
    Сейчас я хочу перенести драйвер коммуникатора в модуль сервера.
    Вопрос. Если из драйвера коммуникатора я подключаюсь к серверу через клиент, то как я могу из модуля обратиться к структуре таблиц? 🙂

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

    Возможность записывать архивы в MSSQL представляется востребованной.
    Вопрос не совсем понятен, приведите пример, пожалуйста.

Просмотр 15 сообщений - с 46 по 60 (из 78 всего)
  • Для ответа в этой теме необходимо авторизоваться.