Автоматизация внешних приложений

Здесь обсуждаются любые продукты компании СофтЛаб-НСК для телевизионного вещания (Форвард Т, Форвард ТС, Форвард Голкипер, Форвард Рефери, Форвард Офис, Форвард Инжест)

Модераторы: Людмила, PR, vd, Даниленко Сергей

Закрыто
Даниленко Сергей
Сообщения: 7091
Зарегистрирован: 26 фев 2004 09:53
Откуда: Techsupport SoftLab-NSK

Сообщение Даниленко Сергей »

:)
kasa
Сообщения: 90
Зарегистрирован: 04 сен 2008 01:50
Откуда: Красноярск

Сообщение kasa »

Хотя нет, напишу, пожалуй, здесь.

Такая вот ситуация:
На сервере запущено расписание.
Запускаю ваше тестовое приложение, соединяюсь.
Создаю очередь, все корректно.
Шлю запрос запрос (Subject=OnAir1.MirrorQuery, Body=Shedule.RunPosition), отсылается корректно.
Через некоторое время (разное) в очереди появляется ответ.
Пытаюсь забрать сообщение из очереди - ошибка mcUnknown, возвращенный HRESULT = E_FAIL

Ничего не понимаю...

Отсюда вопросы:
1. Почему сообщение-ответ пришло не сразу, а с задержкой? Мне показалось, что ответ был отправлен перед самым завершением текущего события плей-листа...
2. В чем может быть причина ошибки при "выгребании" ответа? Может есть где подробный лог посмотреть?


ЗЫ: Так было и с урезанной версией сервера сообщений, так осталось и после того, как я таки поставил полную версию софта...
Последний раз редактировалось kasa 17 сен 2008 14:16, всего редактировалось 1 раз.
vd
Сообщения: 2311
Зарегистрирован: 05 мар 2003 19:21

Сообщение vd »

То, что при отправке сообщения вернулся код ошибки S_OK, означает примерно следующее: "сообщение успешно положено в очередь", а не "сообщение успешно отправлено и доставлено".

Скорее всего, неправильно задано название компьютера и/или очереди, в которую делается отправка сообщения.

Когда ыы из своей очереди пытаетесь забрать сообщение, вы сначала проверяете, что количество сообщений в ней больше нуля?
kasa
Сообщения: 90
Зарегистрирован: 04 сен 2008 01:50
Откуда: Красноярск

Сообщение kasa »

vd писал(а):Скорее всего, неправильно задано название компьютера и/или очереди, в которую делается отправка сообщения.
Ну, server2 трудно набрать с ошибками, а очередь FDOnAir1, насколько я понимаю...
vd писал(а):Когда ыы из своей очереди пытаетесь забрать сообщение, вы сначала проверяете, что количество сообщений в ней больше нуля?
Сейчас речь идет о вашей тестовой программе. Да, количество сообщений увеличивается, после этого жму GetMessage и получаю ошибку

Кстати, как тогда приходит ответ, если компьютер или очередь указаны неверно?
vd
Сообщения: 2311
Зарегистрирован: 05 мар 2003 19:21

Сообщение vd »

Последовательность действий должна быть такой (в программе SLMSTest.exe):

1. В поле ToMachine ОБЯЗАТЕЛЬНО указать имя компьютера. Для локальной машины нужно написать localhost, пустую строку оставлять НЕЛЬЗЯ! То же относится и к созданию Connection из своей программы.

2. В поле ToQueue нужно указать FDOnAir1. Поля Subject и Body для установки соединения не используются, их можно сделать пустыми.

3. Нажать кнопку Connect справа вверху.

4. Далее нужно создать очередь с любым именем - набрать его в поле Name группы Queue (например, "Test") и нажать кнопку Create правее.

5. После этого в поле Subject нужно написать OnAir1.MirrorQuery, в поле Body - строку запроса, например, "Shedule.Length".

6. Нажать кнопку "Queue.Send". То есть сообщение нужно посылать из ОЧЕРЕДИ, не из Connection! Это же относится и к вашей программе.

7. В эту же очередь вернется ответ. Нажмите кнопку GetMessage внизу, и получите в тексте ответа номер расписания (первое расписание имеет номер 0) и количество строк в нем.

Только что проделал эти действия (правда, на локальном компьютере), результат на картинке:
Изображение
Последний раз редактировалось vd 17 сен 2008 14:45, всего редактировалось 1 раз.
vd
Сообщения: 2311
Зарегистрирован: 05 мар 2003 19:21

Сообщение vd »

Что касается удаленного сервера - мне кажется, лучше писать точный IP-адрес компьютера, а не надеяться, что по имени правильно произойдет соединение. Мало ли, какие особенности конфигурации вашей сети.

Кроме того, нужно отключить Windows Firewall на обоих компьютерах. По крайней мере, хотя бы сначала, чтобы убедиться, что соединение работает. Далее нужно настроить Firewall на обоих компьютерах так, чтобы он позволял соединяться этим компьютерам между собой. Вот как именно это сделать, не поскажу, тут я не спец.
kasa
Сообщения: 90
Зарегистрирован: 04 сен 2008 01:50
Откуда: Красноярск

Сообщение kasa »

Проделал описанную процедуру. Вот результат (правда с ошибкой я немного попутал в посте выше):
Изображение
vd
Сообщения: 2311
Зарегистрирован: 05 мар 2003 19:21

Сообщение vd »

Теперь по поводу программы SLMSText.exe.

1. В верхней части окна в группе "Connection" кнопка "Connect", на самом деле, делает только CoCreateInstance серверу сообщений на локальной машине. На этом этапе вообще никакого соединения не происходит.

2. Во второй части группа "Send message" предназначена для отправки сообщений. Если воспользоваться кнопкой "Connection.Send", то будет осуществлена отправка сообщения через созданное соединение, но ответа обратно вы не получите.

В этой группе нужно ТОЛЬКО создать соединение с другим компьютером, указав правильное имя в поле ToMachine, и имя очереди на другом компьютере в поле ToQueue. При этом, в любом случае будет возвращено S_OK, даже если такого компьютера и/или очереди не существует. При создании соединения оно не осуществляется мгновенно, а кладется в очередь запросов, чтобы сразу вернуть управление в вызывающую программу.

3. В третьей части группа "Queue" предназначена для создания своей очереди. После того, как очередь создана, можно из нее отправить сообщение кнопкой "Queue.Send" во второй группе. Опять-таки, запрос лишь кладется в очередь, и управление сразу же возвращается.

4. Самая нижняя группа "Server Connection" сделана для "внутренних" отладочных целей, и вам не нужна.

Резюме: имя компьютера и название очереди лучше все-таки писать правильно, только тогда всё будет работать :-)
Последний раз редактировалось vd 17 сен 2008 15:10, всего редактировалось 1 раз.
vd
Сообщения: 2311
Зарегистрирован: 05 мар 2003 19:21

Сообщение vd »

Вы отключили Firewall на обеих машинах?
kasa
Сообщения: 90
Зарегистрирован: 04 сен 2008 01:50
Откуда: Красноярск

Сообщение kasa »

vd писал(а):Вы отключили Firewall на обеих машинах?
Отключил. Заработало. Спасибо!
vd
Сообщения: 2311
Зарегистрирован: 05 мар 2003 19:21

Сообщение vd »

Отлично. Хотя совсем отключать Firewall все-таки неправильно.

Поэтому лучше на обеих машинах разрешить программе SLMessageServer2.exe осуществлять соединение.

Для этого нужно на обеих (!) машинах:

1. Выйти из программы FDOnAir (и из программы SLMSTest, либо своей программы).

2. В Панели управления вызвать конфигурацию Windows Firewall ("Брандмауэр Windows" в русской системе), выбрать On (или "Включить" в русской системе), галочку "Не разрешать исключения" отключить. Во второй закладке ("Исключения") нужно найти в списке программ SLMessageServer2. Если она уже есть, то включить галочку слева от нее.

3. Если ее нет, то нажать кнопку "Добавить программу", нажать кнопку "Browse" ("Обзор" в русской системе) и выбрать программу:

C:\Program Files\Common Files\SoftLab-Nsk\SLMessageServer2.exe

(вместо диска 'C:' может быть другой, куда установлено ПО ForwardTSoftware).

4. После этого нужно нажать OK, убедиться, что галочка слева от 'SLMessageServer2.exe' в списке включена, снова нажать OK.

!!! Всё это нужно проделать на обеих машинах !!!

После этого должно работать обращение к FDOnAir, который работает на другом компьютере (и на котором проделаны аналогичные действия).

Мы у себя только что это проверили - всё работает.
Последний раз редактировалось vd 18 сен 2008 20:00, всего редактировалось 1 раз.
vd
Сообщения: 2311
Зарегистрирован: 05 мар 2003 19:21

Сообщение vd »

В связи с возникшими вопросами по поводу работы с SLMessageServer мы обновили SDK (документ по работе с SLMessageServer):

http://www.softlab-nsk.com/rus/forward/ ... areSDK.zip

и раздел "Вопрос-ответ".
kasa
Сообщения: 90
Зарегистрирован: 04 сен 2008 01:50
Откуда: Красноярск

Сообщение kasa »

Вот это правильный ход! Ибо, в данном документе наблюдалось как расхождение так и недостаток данных!
Спасибо.
Даниленко Сергей
Сообщения: 7091
Зарегистрирован: 26 фев 2004 09:53
Откуда: Techsupport SoftLab-NSK

Сообщение Даниленко Сергей »

Какие же расхождения там наблюдались?
vd
Сообщения: 2311
Зарегистрирован: 05 мар 2003 19:21

Сообщение vd »

В документе все было написано правильно, расхождений не было (если и было, то только с чьим-то личным неправильным пониманием ;)). Просто некоторые моменты были не до конца расшифрованы.
Закрыто