Delphi WebSphere MQ远程连接

Delphi WebSphere MQ远程连接,delphi,ibm-mq,Delphi,Ibm Mq,我正在用Delphi编写一个应用程序,用于连接到远程MQ服务器并获取消息。 我在comp上安装了一个MQ服务器,并编写了一个测试应用程序。 一切都很好,连接,打开,放置,获取,。。一切都很好。 然后我尝试通过更改地址连接到远程MQ,它可以工作但不正确,它仍然可以与本地MQ一起工作,并从本地获取信息。未切换到其他远程服务器 我的消息来源如下,我该怎么办?谢谢 var QMgrName : MQCHAR48; ConnectOpts : TMQCNO; ClientConn :

我正在用Delphi编写一个应用程序,用于连接到远程MQ服务器并获取消息。
我在comp上安装了一个MQ服务器,并编写了一个测试应用程序。
一切都很好,连接,打开,放置,获取,。。一切都很好。
然后我尝试通过更改地址连接到远程MQ,它可以工作但不正确,它仍然可以与本地MQ一起工作,并从本地获取信息。未切换到其他远程服务器
我的消息来源如下,我该怎么办?谢谢

var
  QMgrName    : MQCHAR48;
  ConnectOpts : TMQCNO;
  ClientConn  : TMQCD;
  Compcode    : MQLONG;
  Reason      : MQLONG;
begin
  StrPCopy(QMgrName, AQueueManager+#0);
  ConnectOpts.StrucId := MQCNO_STRUC_ID;
  ConnectOpts.Version := MQCNO_VERSION_1;
  ConnectOpts.Options := MQCNO_STANDARD_BINDING;
  ConnectOpts.ClientConnOffset := 0;
  ConnectOpts.ClientConnPtr := @ClientConn;

  with ClientConn do begin
    StrPCopy(ClientConn.ConnectionName, format('%s(%s)'#0, [AIP,APort]));
    Version := MQCD_VERSION_6;
    ChannelType := MQCHT_CLNTCONN;
    TransportType := MQXPT_TCP;
    Desc := '';
    QMgrName := '';
    XmitQName := '';
    ShortConnectionName := '';
    MCAName := '';
    ModeName := '';
    TpName := '';
    BatchSize := 50;
    DiscInterval := 6000;
    ShortRetryCount := 10;
    ShortRetryInterval := 60;
    LongRetryCount := 999999999;
    LongRetryInterval := 1200;
    SecurityExit := '';
    MsgExit := '';
    SendExit := '';
    ReceiveExit := '';
    SeqNumberWrap := 999999999;
    MaxMsgLength := 4194304;
    PutAuthority := MQPA_DEFAULT;
    DataConversion := MQCDC_NO_SENDER_CONVERSION;
    SecurityUserData := '';
    MsgUserData := '';
    SendUserData := '';
    ReceiveUserData := '';
    UserIdentifier := '';
    Password := '';
    MCAUserIdentifier := '';
    MCAType := MQMCAT_PROCESS;
    ConnectionName := '';
    RemoteUserIdentifier := '';
    RemotePassword := '';
    MsgRetryExit := '';
    MsgRetryUserData := '';
    MsgRetryCount := 10;
    MsgRetryInterval := 1000;
    HeartbeatInterval := 1;
    BatchInterval := 0;
    NonPersistentMsgSpeed := MQNPMS_FAST;
    StrucLength := MQCD_LENGTH_6;
    ExitNameLength := MQ_EXIT_NAME_LENGTH;
    ExitDataLength := MQ_EXIT_DATA_LENGTH;
    MsgExitsDefined := 0;
    SendExitsDefined := 0;
    ReceiveExitsDefined := 0;
    MsgExitPtr := nil;
    MsgUserDataPtr := nil;
    SendExitPtr := nil;
    SendUserDataPtr := nil;
    ReceiveExitPtr := nil;
    ReceiveUserDataPtr := nil;
    ClusterPtr := nil;
    ClustersDefined := 0;
    NetworkPriority := 0;
    LongMCAUserIdLength := 0;
    LongRemoteUserIdLength := 0;
    LongMCAUserIdPtr := nil;
    LongRemoteUserIdPtr := nil;
//    MCASecurityId := MQSID_NONE_ARRAY;
//    RemoteSecurityId := MQSID_NONE_ARRAY;
  end;
  MQCONNX(@QMgrName, ConnectOpts, HConn,Compcode,Reason);
  if CompCode <> MQCC_OK then
    raise Exception.Create(format('MQCONNX Fail, Completion Code: %d, Reason: %d',[CompCode,Reason]));
var
QMgrName:MQCHAR48;
连接选项:TMQCNO;
客户控制:TMQCD;
Compcode:MQLONG;
原因:MQLONG;
开始
strpcy(QMgrName,AQueueManager+#0);
ConnectOpts.StrucId:=MQCNO_STRUC_ID;
ConnectOpts.Version:=MQCNO_Version_1;
ConnectOpts.Options:=MQCNO_标准_绑定;
ConnectOpts.clientconnfost:=0;
ConnectOpts.ClientConnPtr:=@ClientConn;
从ClientConn开始
StrPCopy(ClientConn.ConnectionName,格式(“%s(%s)”0[AIP,APort]);
版本:=MQCD_版本_6;
ChannelType:=MQCHT\u CLNTCONN;
TransportType:=MQXPT\U TCP;
描述:='';
QMgrName:='';
XmitQName:='';
ShortConnectionName:='';
MCAName:='';
ModeName:='';
TpName:='';
批量大小:=50;
Disc间隔:=6000;
ShortRetryCount:=10;
ShortRetryInterval:=60;
LongRetryCount:=9999999;
LongRetryInterval:=1200;
SecurityExit:='';
MsgExit:='';
SendExit:='';
ReceiveExit:='';
SeqNumberRap:=99999999;
MaxMsgLength:=4194304;
PutAuthority:=MQPA_默认值;
数据转换:=MQCDC\u无\u发送方\u转换;
SecurityUserData:='';
MsgUserData:='';
SendUserData:='';
ReceiveUserData:='';
用户标识符:='';
密码:='';
MCAUserIdentifier:='';
MCAType:=MQMCAT_进程;
ConnectionName:='';
RemoteUserIdentifier:='';
RemotePassword:='';
MsgRetryExit:='';
MsgRetryUserData:='';
MsgRetryCount:=10;
MsgRetryInterval:=1000;
心跳间隔:=1;
批处理间隔:=0;
非持久MsgSpeed:=MQNPMS_FAST;
StrucLength:=MQCD_长度_6;
ExitNameLength:=MQ_EXIT_NAME_LENGTH;
ExitDataLength:=MQ_EXIT_DATA_LENGTH;
MsgExitsDefined:=0;
SendExitsDefined:=0;
ReceiveExitsDefined:=0;
MsgExitPtr:=nil;
MsgUserDataPtr:=nil;
SendExitPtr:=nil;
SendUserDataPtr:=nil;
ReceiveExitPtr:=nil;
ReceiveUserDataPtr:=nil;
ClusterPtr:=零;
集群定义:=0;
网络优先级:=0;
LongMCAUserIdLength:=0;
LongRemoteUserIdleLength:=0;
LongMCAUserIdPtr:=nil;
LongRemoteUserIdPtr:=nil;
//MCASecurityId:=MQSID_NONE_数组;
//RemoteSecurityId:=MQSID\u NONE\u数组;
结束;
MQCONNX(@QMgrName,ConnectOpts,HConn,Compcode,Reason);
如果CompCode MQCC_正常,则
引发异常。创建(格式('MQCONNX失败,完成代码:%d,原因:%d',[CompCode,原因]);

代码片段不显示
uses
语句。根据,

SupportPac包含两个名为“MQI.PAS”和“MQIC.PAS”的文件。 这些是Pascal源,应该放在搜索中的某个位置 要包含在Pascal程序中的Delphi路径。通往 包括它就像在Pascal中使用任何单元一样:

使用MQI

使用MQIC

MQI
是绑定模式(共享内存)连接,
MQIC
是网络堆栈上的客户端连接

这两个选项都可以使用,并让应用程序在运行时确定要使用哪一个。根据报告:

如果要链接到mqm库,则需要一个标准服务器 首先尝试使用默认绑定类型进行连接。如果 无法加载基础服务器库,客户端连接已断开 相反,我尝试了

这向我建议,路径中有两个库,连接首先查找本地QMgr并忽略客户机连接参数,或者您正在使用想要MQIC库的MQI库。确保MQIC库位于路径中,并更改
uses
语句


如果切换库不是单独解决问题,考虑指定<代码> MQCNONEclipse绑定/<代码>,而不是<代码> MQCNOYStAMARDRADION/<代码> .< /P> < P>通过与其他应用程序的测试来验证连接。当我在做MQ时,我总是从他们的一个get/put的C示例开始。让它工作起来,然后担心我的程序是否工作。您的问题可能与连接字符串、身份验证、防火墙等有关,所以在验证连接之前,您的代码是无关的


更新:如果您从stock MQ示例应用程序中获得错误,请在谷歌上搜索示例应用程序的名称和错误代码

说得好。在
C:\ProgramFiles(x86)\IBM\WebSphere MQ 7.5\tools\C\Samples
(Windows上WMQ v7.5的默认位置,但在任何特定安装或不同版本上可能不同)中查找编译的测试程序,如
amqsputc
amqsgetc
amqsbcgc
。谢谢。我开始测试应用程序“amqscnxc”连接到远程服务器。我以amqscnxc-x 192.168.1.3运行,但出现错误2035。这与安全有关!如何设置远程(windows)用户名/密码?