3

ANSI-CおよびMQGET関数を使用してキューからメッセージを受信しようとしています。問題は、常にエラー2010(MQRC_DATA_LENGTH_ERROR)が発生することです。

このエラーは、MQGET呼び出し(DataLength)のパラメーター7に関係していることがわかりました。キューのメッセージは7157460バイトです。MQGETに使用しているチャネルでは、「最大メッセージ長」が104857600(およびメッセージを保持しているキュー)に設定されています。

この例のMQGETも使用しています:http: //www.capitalware.biz/dl/code/c/msg2file.zip

そして、私はまだエラー2010で終わります。私は何が間違っているのですか?MQSERVER環境変数のメッセージの最大サイズをどうにかして増やす必要がありますか?

MQGET呼び出し:

/* ... */
MQLONG   messlen;            /* message length received       */

MQGET(Hcon,                  /* connection handle                 */
        Hobj,                /* object handle                     */
        &md,                 /* message descriptor                */
        &gmo,                /* get message options               */
        buflen,              /* pBuffer length                    */
        pBuffer,             /* pointer to message buffer         */
        &messlen,            /* message length                    */
        &CompCode,           /* completion code                   */
        &Reason);            /* reason code                       */
4

1 に答える 1

2

私はそれを持っている!答えは、MQCONNX呼び出しを使用してキュー・マネージャーに接続することです。

例:

#include <cmqxc.h>
/* ... */
MQCNO   mqcno = {MQCNO_DEFAULT} ; /* Connection options */
MQCD    mqcd  = {MQCD_CLIENT_CONN_DEFAULT};  /* Channel Defs */

/* ... */
mqcd.MaxMsgLength = 104857600L; /* 100 MB */

MQCONNX(mQueueManager.Name,
     &mqcno,
     &mQueueManager.ConnectionHandle,
     &mQueueManager.CompletionCode,
     &mQueueManager.ReasonCode);

それは魅力のように機能しました!

ただし、最大メッセージサイズを増やす必要がある場合は、よく考えてください。デザインに問題がある可能性があります。言い換えれば、MQは大きなメッセージの転送には使用しないでください。MQ File Transfer Editionは、そのときのソリューションの1つです。

于 2012-11-06T15:28:44.243 に答える