powered by simpleCommunicator - 2.0.52     © 2025 Programmizd 02
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / websphere MQGETAny
3 сообщений из 3, страница 1 из 1
websphere MQGETAny
    #32814811
rainbow_demon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
websphere 5.3.1
MS VB 6.0

надо принять сообщение из очереди (очередь открыта, соединение установлено)

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
есть ф-ия 

  Dim md As MQMD                    ' Message descriptor
  Dim gmo As MQGMO                  ' Put message options
  Dim BufLen As Long                ' Length of message to be put
  Dim MessLen As Long               ' Length of returned message
  Dim CompCode As Long              ' Completion code
  Dim Reason As Long                ' Reason code
  Dim arrData() As Byte
  Dim msg
  Dim obj As Object 'MBCOMLib.Message
  
  ReceiveStructure = False
  
  ' Setup Get Message Options to the required values
  MQGMO_DEFAULTS gmo
  gmo.Options = MQGMO_WAIT + MQGMO_ACCEPT_TRUNCATED_MSG
  gmo.WaitInterval =  1000 

  ' Setup message descriptor to the required values
  MQMD_DEFAULTS md
  
  BufLen = 32
  
  'ReDim arrData( 1000 )
  ReDim msg( 40 )
  'msg = arrData
  
  ' Get message from the queue
  MQGETAny Hconn, gHobj, md, gmo, BufLen, msg, MessLen, CompCode, Reason


про функцию написано, что принимает сообщение
http://www-306.ibm.com/software/integration/mqfamily/library/manualsa/csqzak/csqzak3x.htm#IDX2155

и что размер выделенного msg д.б >= (BufLen - 1).
если выделить 40 байт, выставить BufLen = 38, то на MQGETAny все падает (фатально).
если выделить 60, выставить 40 - exception не кидается, но CompCode = 32. msg - содержит <invalid argument or procedure call>.

я ж не знаю размер получаемых данных...
поэтому выделяю массив с запасом...

MQGET не пойдет, так как юзаем байты.
...
Рейтинг: 0 / 0
websphere MQGETAny
    #32814947
rainbow_demon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Отбой. Другая проблема.

предыдущую решил так:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
 Dim gmo As MQGMO                  ' Put message options
  Dim BufLen As Long                ' Length of message to be put
  Dim MessLen As Long               ' Length of returned message
  Dim CompCode As Long              ' Completion code
  Dim Reason As Long                ' Reason code
  Dim msg
  
  
  ReceiveStructure = False
  
  ' Setup Get Message Options to the required values
  MQGMO_DEFAULTS gmo
  gmo.Options = MQGMO_WAIT + MQGMO_ACCEPT_TRUNCATED_MSG
  gmo.WaitInterval =  1000 

  ' Setup message descriptor to the required values
  MQMD_DEFAULTS md
  
  BufLen = 40
  
  'ReDim arrData( 1000 )
  ReDim msg( 41 )
  'msg = arrData
  
  ' Get message from the queue
  MQGETAny Hconn, gHobj, md, gmo, BufLen, CVar(msg), MessLen, CompCode, Reason
  ReDim msg(MessLen)
 
  If CompCode =  0  Then
    
    .....


теперь фишка в том, что MQGETAny не возвращает данных.
Длина сообщения MessLen возвращается верно.
А вот msg - пустой массив байтов....


кстати, без CVar(msg) все падало...

Почему не достаются данные сообщения?
...
Рейтинг: 0 / 0
websphere MQGETAny
    #32815280
Фотография NewYear
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>websphere 5.3.1
WebSphere MQ 5.3.1. это саавсем не WebSphere.


-------
MQGETAny Hconn, gHobj, md, gmo, BufLen, CVar(msg), MessLen, CompCode, Reason
ReDim msg(MessLen)
--------

а что такое ReDim msg(MessLen)?
можешь написать на С?

в wmq не бывает, что CompCode == MQCC_OK и при этом MQGET не возвратил данные.
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / websphere MQGETAny
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]