Автоматизация внешних приложений
Модераторы: Людмила, PR, vd, Даниленко Сергей
-
- Сообщения: 7091
- Зарегистрирован: 26 фев 2004 09:53
- Откуда: Techsupport SoftLab-NSK
-
- Сообщения: 90
- Зарегистрирован: 04 сен 2008 01:50
- Откуда: Красноярск
Хотя нет, напишу, пожалуй, здесь.
Такая вот ситуация:
На сервере запущено расписание.
Запускаю ваше тестовое приложение, соединяюсь.
Создаю очередь, все корректно.
Шлю запрос запрос (Subject=OnAir1.MirrorQuery, Body=Shedule.RunPosition), отсылается корректно.
Через некоторое время (разное) в очереди появляется ответ.
Пытаюсь забрать сообщение из очереди - ошибка mcUnknown, возвращенный HRESULT = E_FAIL
Ничего не понимаю...
Отсюда вопросы:
1. Почему сообщение-ответ пришло не сразу, а с задержкой? Мне показалось, что ответ был отправлен перед самым завершением текущего события плей-листа...
2. В чем может быть причина ошибки при "выгребании" ответа? Может есть где подробный лог посмотреть?
ЗЫ: Так было и с урезанной версией сервера сообщений, так осталось и после того, как я таки поставил полную версию софта...
Такая вот ситуация:
На сервере запущено расписание.
Запускаю ваше тестовое приложение, соединяюсь.
Создаю очередь, все корректно.
Шлю запрос запрос (Subject=OnAir1.MirrorQuery, Body=Shedule.RunPosition), отсылается корректно.
Через некоторое время (разное) в очереди появляется ответ.
Пытаюсь забрать сообщение из очереди - ошибка mcUnknown, возвращенный HRESULT = E_FAIL
Ничего не понимаю...
Отсюда вопросы:
1. Почему сообщение-ответ пришло не сразу, а с задержкой? Мне показалось, что ответ был отправлен перед самым завершением текущего события плей-листа...
2. В чем может быть причина ошибки при "выгребании" ответа? Может есть где подробный лог посмотреть?
ЗЫ: Так было и с урезанной версией сервера сообщений, так осталось и после того, как я таки поставил полную версию софта...
Последний раз редактировалось kasa 17 сен 2008 14:16, всего редактировалось 1 раз.
-
- Сообщения: 2311
- Зарегистрирован: 05 мар 2003 19:21
То, что при отправке сообщения вернулся код ошибки S_OK, означает примерно следующее: "сообщение успешно положено в очередь", а не "сообщение успешно отправлено и доставлено".
Скорее всего, неправильно задано название компьютера и/или очереди, в которую делается отправка сообщения.
Когда ыы из своей очереди пытаетесь забрать сообщение, вы сначала проверяете, что количество сообщений в ней больше нуля?
Скорее всего, неправильно задано название компьютера и/или очереди, в которую делается отправка сообщения.
Когда ыы из своей очереди пытаетесь забрать сообщение, вы сначала проверяете, что количество сообщений в ней больше нуля?
-
- Сообщения: 90
- Зарегистрирован: 04 сен 2008 01:50
- Откуда: Красноярск
Ну, server2 трудно набрать с ошибками, а очередь FDOnAir1, насколько я понимаю...vd писал(а):Скорее всего, неправильно задано название компьютера и/или очереди, в которую делается отправка сообщения.
Сейчас речь идет о вашей тестовой программе. Да, количество сообщений увеличивается, после этого жму GetMessage и получаю ошибкуvd писал(а):Когда ыы из своей очереди пытаетесь забрать сообщение, вы сначала проверяете, что количество сообщений в ней больше нуля?
Кстати, как тогда приходит ответ, если компьютер или очередь указаны неверно?
-
- Сообщения: 2311
- Зарегистрирован: 05 мар 2003 19:21
Последовательность действий должна быть такой (в программе 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) и количество строк в нем.
Только что проделал эти действия (правда, на локальном компьютере), результат на картинке:
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 раз.
-
- Сообщения: 2311
- Зарегистрирован: 05 мар 2003 19:21
Что касается удаленного сервера - мне кажется, лучше писать точный IP-адрес компьютера, а не надеяться, что по имени правильно произойдет соединение. Мало ли, какие особенности конфигурации вашей сети.
Кроме того, нужно отключить Windows Firewall на обоих компьютерах. По крайней мере, хотя бы сначала, чтобы убедиться, что соединение работает. Далее нужно настроить Firewall на обоих компьютерах так, чтобы он позволял соединяться этим компьютерам между собой. Вот как именно это сделать, не поскажу, тут я не спец.
Кроме того, нужно отключить Windows Firewall на обоих компьютерах. По крайней мере, хотя бы сначала, чтобы убедиться, что соединение работает. Далее нужно настроить Firewall на обоих компьютерах так, чтобы он позволял соединяться этим компьютерам между собой. Вот как именно это сделать, не поскажу, тут я не спец.
-
- Сообщения: 90
- Зарегистрирован: 04 сен 2008 01:50
- Откуда: Красноярск
-
- Сообщения: 2311
- Зарегистрирован: 05 мар 2003 19:21
Теперь по поводу программы SLMSText.exe.
1. В верхней части окна в группе "Connection" кнопка "Connect", на самом деле, делает только CoCreateInstance серверу сообщений на локальной машине. На этом этапе вообще никакого соединения не происходит.
2. Во второй части группа "Send message" предназначена для отправки сообщений. Если воспользоваться кнопкой "Connection.Send", то будет осуществлена отправка сообщения через созданное соединение, но ответа обратно вы не получите.
В этой группе нужно ТОЛЬКО создать соединение с другим компьютером, указав правильное имя в поле ToMachine, и имя очереди на другом компьютере в поле ToQueue. При этом, в любом случае будет возвращено S_OK, даже если такого компьютера и/или очереди не существует. При создании соединения оно не осуществляется мгновенно, а кладется в очередь запросов, чтобы сразу вернуть управление в вызывающую программу.
3. В третьей части группа "Queue" предназначена для создания своей очереди. После того, как очередь создана, можно из нее отправить сообщение кнопкой "Queue.Send" во второй группе. Опять-таки, запрос лишь кладется в очередь, и управление сразу же возвращается.
4. Самая нижняя группа "Server Connection" сделана для "внутренних" отладочных целей, и вам не нужна.
Резюме: имя компьютера и название очереди лучше все-таки писать правильно, только тогда всё будет работать
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 раз.
-
- Сообщения: 2311
- Зарегистрирован: 05 мар 2003 19:21
-
- Сообщения: 90
- Зарегистрирован: 04 сен 2008 01:50
- Откуда: Красноярск
-
- Сообщения: 2311
- Зарегистрирован: 05 мар 2003 19:21
Отлично. Хотя совсем отключать 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, который работает на другом компьютере (и на котором проделаны аналогичные действия).
Мы у себя только что это проверили - всё работает.
Поэтому лучше на обеих машинах разрешить программе 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 раз.
-
- Сообщения: 2311
- Зарегистрирован: 05 мар 2003 19:21
В связи с возникшими вопросами по поводу работы с SLMessageServer мы обновили SDK (документ по работе с SLMessageServer):
http://www.softlab-nsk.com/rus/forward/ ... areSDK.zip
и раздел "Вопрос-ответ".
http://www.softlab-nsk.com/rus/forward/ ... areSDK.zip
и раздел "Вопрос-ответ".
-
- Сообщения: 90
- Зарегистрирован: 04 сен 2008 01:50
- Откуда: Красноярск
-
- Сообщения: 7091
- Зарегистрирован: 26 фев 2004 09:53
- Откуда: Techsupport SoftLab-NSK
-
- Сообщения: 2311
- Зарегистрирован: 05 мар 2003 19:21