Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MQMessageExploring(使用WebSphere MQ.NET API)_.net_Api_Websphere_Ibm Mq_Mq - Fatal编程技术网

MQMessageExploring(使用WebSphere MQ.NET API)

MQMessageExploring(使用WebSphere MQ.NET API),.net,api,websphere,ibm-mq,mq,.net,Api,Websphere,Ibm Mq,Mq,我是WebSphereMQ的新手,但我有一个关于MQMessageAPI的问题。 MQMessage的接收者似乎应该提前知道: 写入的消息类型(如果为WriteInt,则为ReadInt等) 属性名称和类型(如果是SetBooleanProperty(名称),则是GetBooleanProperty(名称)) 这对我来说毫无意义。因为如果我不熟悉消息结构,在检索其中的数据之前,我是否应该探索所有选项 我们将感谢您的帮助, Guy是的,如果消息是结构化数据(如固定长度的记录格式),则必须事先知道消

我是WebSphereMQ的新手,但我有一个关于MQMessageAPI的问题。 MQMessage的接收者似乎应该提前知道:

  • 写入的消息类型(如果为WriteInt,则为ReadInt等)
  • 属性名称和类型(如果是SetBooleanProperty(名称),则是GetBooleanProperty(名称))

    这对我来说毫无意义。因为如果我不熟悉消息结构,在检索其中的数据之前,我是否应该探索所有选项

    我们将感谢您的帮助,
    Guy

    是的,如果消息是结构化数据(如固定长度的记录格式),则必须事先知道消息的格式才能对其进行解析,这是绝对正确的。另一方面,如果消息负载被标记为数据结构(例如有效的XML),那么您将使用普通解析来访问它。例如,您可以使用XPath访问XML负载,而不必首先知道确切的结构

    您提到的方法(WriteInt、ReadInt等)通常用于从已知格式提取数据,并将缓冲区指针提前到下一个字段。但是,也有读取和写入UTF字符串的方法。如果由于某种原因,应用程序必须处理各种消息类型,则可以通过查询消息描述符来查询消息格式和消息类型。中记录了执行此操作的方法。通过这种方式,您可以区分不同类型和格式的消息,并对它们进行适当的解析

    请注意,我上面链接的文档是v7.Net类。由于v6的使用寿命将在2011年9月结束,所以希望新的开发都使用v7类,最好连接到v7 QMgr

    编辑-回复评论

    检查消息格式的示例:
    根据上面链接的页面,检查MQMD中字段的C头文件cmqc.h。这将告诉您字段名和字段类型。在默认Windows安装中,此文件位于
    C:\ProgramFiles\IBM\WebSphere MQ\tools\C\include\cmqc.h

    例如,
    message.getStringProperty('Root.MQMD.Format')
    返回消息格式。在cmqc.h的顶部附近,您将发现一个名为MQFMT_uu2;的宏列表,其中包含MQMD格式字段的可能值。从v7.01开始,它们如下所示:

     /* Formats */
     #define MQFMT_NONE               "        "
     #define MQFMT_ADMIN              "MQADMIN "
     #define MQFMT_CHANNEL_COMPLETED  "MQCHCOM "
     #define MQFMT_CICS               "MQCICS  "
     #define MQFMT_COMMAND_1          "MQCMD1  "
     #define MQFMT_COMMAND_2          "MQCMD2  "
     #define MQFMT_DEAD_LETTER_HEADER "MQDEAD  "
     #define MQFMT_DIST_HEADER        "MQHDIST "
     #define MQFMT_EMBEDDED_PCF       "MQHEPCF "
     #define MQFMT_EVENT              "MQEVENT "
     #define MQFMT_IMS                "MQIMS   "
     #define MQFMT_IMS_VAR_STRING     "MQIMSVS "
     #define MQFMT_MD_EXTENSION       "MQHMDE  "
     #define MQFMT_PCF                "MQPCF   "
     #define MQFMT_REF_MSG_HEADER     "MQHREF  "
     #define MQFMT_RF_HEADER          "MQHRF   "
     #define MQFMT_RF_HEADER_1        "MQHRF   "
     #define MQFMT_RF_HEADER_2        "MQHRF2  "
     #define MQFMT_STRING             "MQSTR   "
     #define MQFMT_TRIGGER            "MQTRIG  "
     #define MQFMT_WORK_INFO_HEADER   "MQHWIH  "
     #define MQFMT_XMIT_Q_HEADER      "MQXMIT  "
    
     /****************************************************************/
     /*  MQMD2 Structure -- Version-2 Message Descriptor             */
     /****************************************************************/
    
    
     typedef struct tagMQMD2 MQMD2;
     typedef MQMD2 MQPOINTER PMQMD2;
    
     struct tagMQMD2 {
       MQCHAR4   StrucId;           /* Structure identifier */
       MQLONG    Version;           /* Structure version number */
       MQLONG    Report;            /* Report options */
       MQLONG    MsgType;           /* Message type */
       MQLONG    Expiry;            /* Expiry time */
       MQLONG    Feedback;          /* Feedback or reason code */
       MQLONG    Encoding;          /* Numeric encoding of message data */
       MQLONG    CodedCharSetId;    /* Character set identifier of message
                                       data */
       MQCHAR8   Format;            /* Format name of message data */
       MQLONG    Priority;          /* Message priority */
       MQLONG    Persistence;       /* Message persistence */
       MQBYTE24  MsgId;             /* Message identifier */
       MQBYTE24  CorrelId;          /* Correlation identifier */
       MQLONG    BackoutCount;      /* Backout counter */
       MQCHAR48  ReplyToQ;          /* Name of reply-to queue */
       MQCHAR48  ReplyToQMgr;       /* Name of reply queue manager */
       MQCHAR12  UserIdentifier;    /* User identifier */
       MQBYTE32  AccountingToken;   /* Accounting token */
       MQCHAR32  ApplIdentityData;  /* Application data relating to
                                       identity */
       MQLONG    PutApplType;       /* Type of application that put the
                                       message */
       MQCHAR28  PutApplName;       /* Name of application that put the
                                       message */
       MQCHAR8   PutDate;           /* Date when message was put */
       MQCHAR8   PutTime;           /* Time when message was put */
       MQCHAR4   ApplOriginData;    /* Application data relating to
                                       origin */
       MQBYTE24  GroupId;           /* Group identifier */
       MQLONG    MsgSeqNumber;      /* Sequence number of logical message
                                       within group */
       MQLONG    Offset;            /* Offset of data in physical message
                                       from start of logical message */
       MQLONG    MsgFlags;          /* Message flags */
       MQLONG    OriginalLength;    /* Length of original message */
     };
    
    实际的MQMD结构在cmqc.h的底部附近定义。从v7.0.1开始,它如下所示:

     /* Formats */
     #define MQFMT_NONE               "        "
     #define MQFMT_ADMIN              "MQADMIN "
     #define MQFMT_CHANNEL_COMPLETED  "MQCHCOM "
     #define MQFMT_CICS               "MQCICS  "
     #define MQFMT_COMMAND_1          "MQCMD1  "
     #define MQFMT_COMMAND_2          "MQCMD2  "
     #define MQFMT_DEAD_LETTER_HEADER "MQDEAD  "
     #define MQFMT_DIST_HEADER        "MQHDIST "
     #define MQFMT_EMBEDDED_PCF       "MQHEPCF "
     #define MQFMT_EVENT              "MQEVENT "
     #define MQFMT_IMS                "MQIMS   "
     #define MQFMT_IMS_VAR_STRING     "MQIMSVS "
     #define MQFMT_MD_EXTENSION       "MQHMDE  "
     #define MQFMT_PCF                "MQPCF   "
     #define MQFMT_REF_MSG_HEADER     "MQHREF  "
     #define MQFMT_RF_HEADER          "MQHRF   "
     #define MQFMT_RF_HEADER_1        "MQHRF   "
     #define MQFMT_RF_HEADER_2        "MQHRF2  "
     #define MQFMT_STRING             "MQSTR   "
     #define MQFMT_TRIGGER            "MQTRIG  "
     #define MQFMT_WORK_INFO_HEADER   "MQHWIH  "
     #define MQFMT_XMIT_Q_HEADER      "MQXMIT  "
    
     /****************************************************************/
     /*  MQMD2 Structure -- Version-2 Message Descriptor             */
     /****************************************************************/
    
    
     typedef struct tagMQMD2 MQMD2;
     typedef MQMD2 MQPOINTER PMQMD2;
    
     struct tagMQMD2 {
       MQCHAR4   StrucId;           /* Structure identifier */
       MQLONG    Version;           /* Structure version number */
       MQLONG    Report;            /* Report options */
       MQLONG    MsgType;           /* Message type */
       MQLONG    Expiry;            /* Expiry time */
       MQLONG    Feedback;          /* Feedback or reason code */
       MQLONG    Encoding;          /* Numeric encoding of message data */
       MQLONG    CodedCharSetId;    /* Character set identifier of message
                                       data */
       MQCHAR8   Format;            /* Format name of message data */
       MQLONG    Priority;          /* Message priority */
       MQLONG    Persistence;       /* Message persistence */
       MQBYTE24  MsgId;             /* Message identifier */
       MQBYTE24  CorrelId;          /* Correlation identifier */
       MQLONG    BackoutCount;      /* Backout counter */
       MQCHAR48  ReplyToQ;          /* Name of reply-to queue */
       MQCHAR48  ReplyToQMgr;       /* Name of reply queue manager */
       MQCHAR12  UserIdentifier;    /* User identifier */
       MQBYTE32  AccountingToken;   /* Accounting token */
       MQCHAR32  ApplIdentityData;  /* Application data relating to
                                       identity */
       MQLONG    PutApplType;       /* Type of application that put the
                                       message */
       MQCHAR28  PutApplName;       /* Name of application that put the
                                       message */
       MQCHAR8   PutDate;           /* Date when message was put */
       MQCHAR8   PutTime;           /* Time when message was put */
       MQCHAR4   ApplOriginData;    /* Application data relating to
                                       origin */
       MQBYTE24  GroupId;           /* Group identifier */
       MQLONG    MsgSeqNumber;      /* Sequence number of logical message
                                       within group */
       MQLONG    Offset;            /* Offset of data in physical message
                                       from start of logical message */
       MQLONG    MsgFlags;          /* Message flags */
       MQLONG    OriginalLength;    /* Length of original message */
     };
    

    cmqc.h文件为显示的每个字段定义宏,这些宏将包含可能的值。这些宏也在.Net类中定义为MQC对象。MQC,但由于它没有方法,因此该页面只向您引用它定义的WMQ常量列表。那一页。

    @T.Rob-谢谢,但是你能详细说明一下你提到的“询问”方法吗?我阅读了V7.0规范,但仍然不理解Inquire方法(在所有类型的MQ对象上)及其工作原理。如果您能给出一个简短的代码片段,我们将不胜感激。@T.Rob我读了更多关于它的内容,您可以使用MQMessage的:Format和MessageType属性,而不是查询它们。我仍然不明白如何知道这些类型(或者我应该限制只使用WriteUTF和ReadUTF)?那么消息属性呢?@Guy-我不是想暗示这些属性有一个查询方法。您可以使用适当的message.get*属性方法来获取任何MQMD属性。我已经用一个示例编辑了回复,说明了如何获取MQMD.Format属性和指向其他文档页面的指针。希望对您有所帮助。@T.Rob,谢谢,但是:message.Format和message.getStringProperty('Root.MQMD.Format')之间有什么区别?如何获取有关消息包含的自定义属性的任何信息?他们的类型和名字?在JMS中有Message.getPropertiesNames(),我可以在其中遍历所有消息属性。我在这里找类似的东西。我同意在JMS中,属性类型也有同样的问题,但至少知道属性的名称。@Guy-message.Format和message.getStringProperty('Root.MQMD.Format')之间没有区别。我想用一个直接可用的属性来说明getStringProperty的使用,以便您可以比较这两种方法。可以直接作为消息属性使用的字段数量有限,但任何消息或用户属性都可以通过其他方式访问。要检索属性名称,请使用MQMessage的
    public System.Collections.IEnumerator GetPropertyNames(字符串名称)
    方法。