Вернулся к этой задаче. На вашем примере накатал тест. Внизу привел его вывод. Тут же запускаю ЛЭРС-клиент и нормально подключаюсь к серверу этому. В чем может быть ошибка? Метод 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.System.xml описание метода Connect - все типы совпадают. Не могу понять ошибку. Proxy на моем компе не используется и, самое то, что меня удивляет, запускаю ЛЭРС-клиент у себя и он без проблем подключается. Подумал, может что то опять поменялось в библиотеках у вас.
Обратил внимание что у вас 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 ложится автоматически?
Вот информация по серверу: по логам ЛЭРС Учет 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% стоимости лицензий.
Спасибо за ответ, стало понятно почему так инженер техподержки пишет - обновитесь и т.д.
Со своей стороны могу отметить, что задача получения информации с приборов учета не поменялась за это время (я больше чем уверен, что и приборы учета не поменялись, админ говорит и сервер они не обновляли), а проблема адаптации скрипта встает передо мной третий раз (Третий раз, Карл!). Как говорили раньше - “Спасибо тов.Сталину, за наше счастливое детство!”, перефразирую - спасибо, что вы есть (клиент то ваш работает исправно), но приходится о вас забыть (в части подстройки вашего ПО под наши нужды, для коих (подчеркиваю - именно наших нужд) ваш клиент большой, неудобный и избыточный в функционале).