vb.net подключается к серверу MQ

Я перенес приложение с vb6 на vb.net, все работает нормально, за исключением получения сообщения с сервера MQ, когда вызывается MQGet, я получаю сообщение об ошибке 2033 (нет сообщения)
также прикрепляю сообщение захвата, отправленное MQ с работы vb6 и не работает vb.net, помогите?введите здесь описание изображения

    '***********************************
    'Send(MQPUT) to MQSeries and CICS
    '***********************************
    PutMsgOpts = MQPMO_DEFAULT

    MsgDesc = MQMD_DEFAULT
    MsgDesc.Persistence = MQPER_PERSISTENT
    MsgDesc.MsgId = MQMI_NONE.Value
    MsgDesc.CorrelId = "AMQ!NEW_SESSION_CORRELID" 'if using MQBridge
    MsgDesc.ReplyToQ = gReplyToQ
    MsgDesc.ReplyToQMgr = gMQRplyMgrName
    MsgDesc.Format_Renamed = MQFMT_STRING

    'sPutMsg is composed of 8 byte program name(host/cics)
    ' plus data desired to pass as string only (dfcommarea)
    '************  MAX LENGTH IS 32776  *******************
    sPutMsg = gCICSPrgName & gsHost_Msg
    If Len(sPutMsg) <> 32768 Then
        sPutMsg = sPutMsg & Space(32768 - Len(sPutMsg))
    End If

    sMsgIdGet.Value = MsgDesc.MsgId

    '*******************************************
    'MQClose the queue for request sent to host
    '*******************************************
    'HOST-BYPASS
    MQCLOSE(Hconn, Hobj, MQCO_NONE, cC, Reason)
    'HOST-BYPASS

    '**********************************************************
    'MQOpen the queue for receiving the request from the host
    '**********************************************************

    'set up the queue name
    ObjDesc = MQOD_DEFAULT
    ObjDesc.ObjectName = gReplyToQ

    'Open
    'HOST-BYPASS
    MQOPEN(Hconn, ObjDesc, MQOO_INPUT_AS_Q_DEF Or MQOO_FAIL_IF_QUIESCING, Hobj, cC, Reason)
    'HOST-BYPASS
    'Hconn is set by MQseries in the Connect

    '**************************************
    'Receive (MQGET) from MQSeries and CICS
    '**************************************
    GetMsgOpts = MQGMO_DEFAULT
    GetMsgOpts.Options = MQGMO_WAIT Or MQGMO_CONVERT
    GetMsgOpts.WaitInterval = 10000 '20 seconds

    MsgDesc = MQMD_DEFAULT
    MsgDesc.Format_Renamed = MQFMT_STRING
    MsgDesc.Persistence = MQPER_PERSISTENT
    MsgDesc.CorrelId = sMsgIdGet.Value 'set correlId with MQGET msgid returned
    MsgDesc.MsgId = MQMI_NONE.Value
    MsgDesc.ReplyToQ = gReplyToQ
    MsgDesc.ReplyToQMgr = gMQRplyMgrName

    '** sGetMsg is composed of 8 byte program name(host/cics)
    '** plus data desired to pass as string only (dfcommarea)

    '************  MAX LENGTH IS 32776  *******************
    sGetMsg = New String(" ", 32768)

    'Command to receive from to MQSeries and CICS
    retryCount = 0
    cC = MQCC_OK + 1
    Reason = 2033
    Do While cC <> MQCC_OK And Reason = 2033
        MQGET(Hconn, Hobj, MsgDesc, GetMsgOpts, Len(sGetMsg), sGetMsg, readlen, cC, Reason)
        retryCount = retryCount + 1
        If retryCount > 1 Then Exit Do
    Loop 
    '************************
    'MQClose queue for input
    '************************
    MQCLOSE(Hconn, Hobj, MQCO_NONE, cC, Reason)

person Naser Nassar    schedule 15.06.2016    source источник
comment
это сработало, выполнив: Dim MyNewCorrelID As String = AMQ!NEW_SESSION_CORRELID mqMsg.CorrelationId = Encoding.ASCII.GetBytes(MyNewCorrelID), когда я помещаю сообщение, а также использую mqMsg.CorrelationId = mqMsg.MessageId, когда я получаю сообщение. но у меня другая проблема, я не могу прочитать сообщение как строку. 1-System.Console.WriteLine(mqMsg.ReadString(mqMsg.MessageLength)) 2-message_string = mqMsg.ReadString(mqMsg.MessageLength) первая строка пишет сообщение, которое я хочу в консольной строке, вторая строка дает мне Unable to читать дальше конца потока, Любая помощь, пожалуйста?   -  person Naser Nassar    schedule 22.06.2016


Ответы (1)


Если вы получаете 2033, то вы знаете, что очередь есть, но сообщение, которое вы пытаетесь получить, — нет. Используйте MQ Explorer или простые примеры MQ вместе с runmqsc, чтобы проверить, есть ли какие-либо сообщения в этой очереди, и если они есть, соответствует ли их идентификатор корреляции тому, что предоставляет ваша программа.

Если там нет сообщений, проверьте, действительно ли ваши сообщения были получены программой CICS, которой вы их отправляете, и ответила ли эта программа.

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

person Yuri Steinschreiber    schedule 16.06.2016
comment
Спасибо ValerieLampkin, пожалуйста, я новичок в MQ и многого не знаю об этом и даже о vb.net, пожалуйста, вы можете в прикрепленном файле между сообщением от рабочего VB6 и VB.net, вы можете знать, какой у меня атрибут неправильное прохождение в vb.net. - person Naser Nassar; 20.06.2016
comment
Я не вижу никакой разницы между сообщениями, конечно, я не следил за каждым битом на снимке экрана — вы можете лучше сохранить сообщения и сравнить файлы, чтобы убедиться. Но я хочу сказать, что важно не только то, как вы создаете и отправляете сообщения, важна вся ваша установка. Вы ничего не говорите об остальной системе - вы используете ту же настройку или новую? Это тот же диспетчер очередей или нет? Как настроены удаленные очереди и каналы? Короче говоря, следите за потоком сообщений и находите место, где что-то идет не так. - person Yuri Steinschreiber; 21.06.2016