Библиотека автоматизации: ошибка при вызове метода LersServer.Connect


Вернулся к этой задаче. На вашем примере накатал тест. Внизу привел его вывод. Тут же запускаю ЛЭРС-клиент и нормально подключаюсь к серверу этому. В чем может быть ошибка? Метод Connect вроде бы использую корректно.

Запуск теста
подключаемся к серверу по адресу 199.299.299.10 : 10000
dbg–Логин/пароль: лгн / Lers.Networking.BasicAuthenticationInfo
ошибка== System.Management.Automation.MethodInvocationException: Исключение при вызове “Connect” с “3” аргументами: “Потеряно соединение с сервером. Причина: Нарушен протокол обмена с сервером.
Удаленный хост, к которому произведено подключение, не является сервером ЛЭРС УЧЕТ. Укажите правильный адрес сервера в настройках подключения.” —> Lers.Networking.RequestDisconnectException: Потеряно соединение с сервером. Причина: Нарушен протокол обмена с сервером.

Удаленный хост, к которому произведено подключение, не является сервером ЛЭРС УЧЕТ. Укажите правильный адрес сервера в настройках подключения.
в Lers.AsyncOperation.GetResult()
в Lers.LersServer.Connect(String host, UInt16 port, ProxySettings proxy, AuthenticationInfo authInfo)
в Lers.LersServer.Connect(String host, UInt16 port, AuthenticationInfo authInfo)
в CallSite.Target(Closure , CallSite , Object , Object , Object , Object )
— Конец трассировки внутреннего стека исключений —
в System.Management.Automation.ExceptionHandlingOps.CheckActionPreference(FunctionContext funcContext, Exception exce
ption)
в System.Management.Automation.Interpreter.ActionCallInstruction`2.Run(InterpretedFrame frame)
в System.Management.Automation.Interpreter.EnterTryCatchFinallyInstruction.Run(InterpretedFrame frame)
в System.Management.Automation.Interpreter.EnterTryCatchFinallyInstruction.Run(InterpretedFrame frame)

Код был такой:

# Настройки ########################################################################
    
# путь к фреймворку ЛЭРС УЧЕТ
$LersFrameworkPath = "D:PPshlers2016Lers.System.dll" 
    
# Адрес сервера приложения
$ServerAddress = "199.299.299.10"
    
# Порт сервера приложения
$ServerPort = 10000
   
# Имя входа/пароль для подключения к Серверу
$Login = "лгн"
$PassWord = "прл"
    
# Подключаемые типы ##################################################################
    
    try
    {
        # подключаем фреймворк
        add-type -path $LersFrameworkPath
    }
    catch
    {
        write-host 'Ошибка. Не удалось загрузить файл Lers.System.dll. Проверьте правильность расположения файла. ' + $Error[0].Exception.Message
        exit
    }

 ##### Функция подключается к серверу автоматизации и возвращает объект сервера
    Function ConnectToServer();
    {
        try
        {
            Write-Host 'подключаемся к серверу по адресу ' $ServerAddress ':' $ServerPort
            
            $securePassword = [Lers.Networking.SecureStringHelper]::ConvertToSecureString($PassWord);

	    $authenticationInfo = New-Object Lers.Networking.BasicAuthenticationInfo($Login, $securePassword);
		
	    # подключаемся к серверу
            $server = new-object Lers.LersServer

            Write-Host 'dbg--Логин/пароль:' $Login '/' $authenticationInfo
			
            $server.Connect($ServerAddress, $ServerPort, $authenticationInfo);
            return $server
        }
        catch
        {
            Write-Host 'ошибка== ' $Error[0].Exception   
            throw new-object Exception('(me) Не удалось подключится к серверу ЛЭРС УЧЕТ. ', $Error[0].Exception);
        }
    }

Я отделил ваше сообщение, поскольку по правилам нашего форума один вопрос должен содержаться в одной теме.

В изначальной теме речь шла о более не поддерживаемой библиотеке автоматизации. Сейчас вы используете Lers Framework или всё ещё библиотеку?

Библиотека автоматизации не работает, так что хочу скрипт свой перевести на Lers Framework. Проверил по Lers.System.xml описание метода Connect - все типы совпадают. Не могу понять ошибку. Proxy на моем компе не используется и, самое то, что меня удивляет, запускаю ЛЭРС-клиент у себя и он без проблем подключается. Подумал, может что то опять поменялось в библиотеках у вас.

Метод LersServer.Connect точно не менялся.

Обратил внимание что у вас IP-адрес указан как 199.299.299.10. Здесь точно всё правильно? В IP-адресе все октеты могут иметь значение только от 0 до 255.

Ну естественно, я поменял реальный ip на фикцию.
Можете пример описания параметра ProxySettings привести? Может с прокси у меня какие то затыки, в IE стоит Автоматическое определение параметров.

А рабочее место оператора с этого компьютера подключается? Параметры прокси-сервера в нём какие?

Да, подключается. В Параметрах подключения выбрана опция “Не использовать прокси-сервер”.

Я в кленте поставил протоколирование и в логе вижу:
24-11-2016 13:27:39.416 I Соединение установлено. LERS.Common.Connection
24-11-2016 13:27:39.417 D Получен ответ от сервера. Размер 4 байт. LERS.Common.Connection
Правильно ли я понимаю, что клиент использует для подключения другой объект - LERS.Common.
Собственно тогда понятно, что один метод может работать, а другой может и не работать. Нужны ли какие то дополнительные действия, что бы работала Lers Framework на сервере. При обновлении сервера туда dll-ка Lers.System.dll ложится автоматически?

Какая версия ЛЭРС УЧЕТ установлена на компьютере с клиентом и какая на компьютере с сервером?

Посмотреть версию клиента можно в “О программе”. Версию сервера можно посмотреть в журнале сервера (Поиск по фразе “Версия исполняемого файла:”).

Клиент у меня показывает версию 2.78.88 (сборка 26039). Версию сервера быстро догнать не смогу - надо запрашивать энергетическую компанию.

Вот информация по серверу: по логам ЛЭРС Учет 1.0 Админ сказал сервер они не обновляли. Вы наверное сами можете посмотреть по серийному номеру лицензии, который виден в клиенте - FD600B70. По наличию dll-лек начинающихся с Lers - у них там только две Lers.System.dll и Lers.Common.dll. Версия Lers.Common.dll 2.78.88 26039 - т.е. соответствует клиенту.
Получается я не могу использовать Lers Framework в данной конфигурации, так ли это? И какие варианты у меня есть?

Версия 2.78 уже давно не поддерживается, т.к. она сильно устарела. Вам стоит обновиться до текущей версии и уже на основе фрэймворка текущей версии писать скрипт.

Да я не могу указать другой организации, что им делать. Причем обновиться, как я понял админа, стоит денежку, которой у них нет. Единственное, что мне не нравиться в вашей компании, это непрограммируемые неожиданности - никогда не знаешь когда твой код перестанет работать. Я конечно, достаточно не типичный пользователь вашего продукта, мне нужна только оперативная информация по счетчикам - и то постоянные грабли то здесь, то там.
А ответ техподдержки означает для нас, что задачу проще закрыть и забить, хотя были затрачены ресурсы и все когда то работало. Мне напомнило ситуацию с сотовыми -купите новый смартфон, потому что аккумуляторов к вашей модели уже не найти. Для меня это означает, что вы ориентированы на пользователей которые запускают ваш клиент и таким образом получают информацию, для интеграции с другими системами ваш продукт является недружественным и сложным в поддержке.

Последнее обновление для версии 2.78 вышло в июле 2012г, поэтому ваш упрек про “непрограммируемые неожиданности” мы не принимаем.

Пользователям 2-й версии оказывается только ограниченная техническая поддержка по вопросам обновления до 3-й версии. При необходимости, мы по прежнему готовы предоставить установочные пакеты и документацию для версии 2.78. Если у вас есть вопросы по поводу политики оказания тех. поддержки пользователям второй версии - мы готовы обсудить их, но в отдельной теме и другом разделе.

Теперь давайте вернемся к предмету данной темы. В версии 2.хх сервер, при подключении клиента, отправлял ему строку “OK”. Сообщение “Нарушен протокол обмена с сервером” означало, что клиент подключился к серверу, но вместо ответа “ОК” получил что-то другое. Чаще всего, это были сообщения от прокси-сервера о необходимости авторизации. Вы можете легко проверить это, подключившись к серверу из любой терминальной программы, например, telnet.

P.S. Все пользователи 2-й версии по прежнему могут бесплатно обновиться до версии 3.06 или до последней версии за 50% стоимости лицензий.

Спасибо за ответ, стало понятно почему так инженер техподержки пишет - обновитесь и т.д.
Со своей стороны могу отметить, что задача получения информации с приборов учета не поменялась за это время (я больше чем уверен, что и приборы учета не поменялись, админ говорит и сервер они не обновляли), а проблема адаптации скрипта встает передо мной третий раз (Третий раз, Карл!). Как говорили раньше - “Спасибо тов.Сталину, за наше счастливое детство!”, перефразирую - спасибо, что вы есть (клиент то ваш работает исправно), но приходится о вас забыть (в части подстройки вашего ПО под наши нужды, для коих (подчеркиваю - именно наших нужд) ваш клиент большой, неудобный и избыточный в функционале).