2016-06-15 4 views
0

나는 vb6에서 vb.net으로 응용 프로그램을 마이그레이션했습니다. MQ 서버에서 메시지를받는 것 외에는 문제가 없습니다. MQGet이 호출되면 2033 오류 (메시지 없음)가 발생합니다.
도 첨부됩니다. vb6에서 MQ로 보내고 vb.net에서 작동하지 않는 캡처 메시지가 도움이 되셨습니까? 당신이 2033을 얻을 경우 enter image description herevb.net에서 MQ 서버에 연결

'*********************************** 
    '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) 
+0

그것은 수행하여 일 나는 메시지를 받는다. 하지만 나는 문자열로 메시지를 읽을 수 없다는 또 다른 문제가 있습니다. 1-System.Console.WriteLine (mqMsg.ReadString (mqMsg.MessageLength)) 2-message_string = mqMsg.ReadString (mqMsg.MessageLength) 첫 번째 줄은 콘솔 줄에 원하는 메시지를 쓰고 두 번째 줄은 줄을 씁니다. 나를 "스트림의 끝을 넘어 읽을 수 없습니다", 어떤 도움이 필요합니까? –

답변

0

는, 당신은 큐가 알고 있지만 당신이 검색하고자하는 메시지가 없습니다. runmqsc와 함 2 MQ Explorer 또는 일반 MQ 샘플을 사용하여 해당 큐에 메시지가 있는지 점검하고,있을 경우, 상관 ID가 프로그램이 제공하는 것과 일치하는지 점검하십시오.

메시지가없는 경우, 메시지를 보내고있는 CICS 프로그램이 실제로 수신했는지, 프로그램이 응답했는지 점검하십시오.

2033 문제는 코딩 문제 일 수 있지만 전환과 함께 변경된 구성 및 설정의 문제 일 수 있습니다. 큐 관리자가 다르게 구성되어 있고 채널이 다르게 구성되어있을 수 있습니다. 전체 체인을 확인하십시오. 희미한 MyNewCorrelID을 mqMsg.CorrelationId = Encoding.ASCII.GetBytes (MyNewCorrelID)라는 메시지를 넣어 사용할 수도 mqMsg.CorrelationId = mqMsg.MessageId 때 문자열 = "AMQ NEW_SESSION_CORRELID!"으로 :

+0

감사합니다. ValerieLampkin, 제발 MQ에 익숙하지 않습니다. 그리고 vb.net에 대해서도 많이 알지 못합니다. VB6에서 작동하는 메시지와 VB.net에서 메시지 사이에 첨부 파일을 보내 주시겠습니까? vb.net에서 잘못 전달하고 있습니다. –

+0

메시지 간의 차이점을 볼 수는 없지만 스크린 샷의 모든 비트를 따라 가지 않았습니다. 메시지를 저장하고 파일을 비교하여 확인하는 것이 더 좋습니다. 하지만 내가 말하는 것은 중요한 메시지를 만들고 보내는 것뿐만 아니라 전체 설정 문제입니다. 나머지 시스템에 대해서는 아무 것도 말하지 않고 있습니다. 동일한 설정이나 새 설정을 사용하고 있습니까? 동일한 큐 관리자입니까? 원격 대기열 및 채널은 어떻게 구성됩니까? 즉, 메시지 흐름을 따르고 그것이 잘못되는 위치를 찾으십시오. –