技术开发 频道

BizTalk Server中使用MQSeries适配器

【IT168 技术文档】

    前段时间在测试BizTalk Server 2006 中新增加的MQSeries适配器时,出现一些问题,花了不少时间来调试。在BizTalk Server和IBM WebSphere MQ同时部署在本地情况下,消息队列访问调试成功。两个系统分开部署到不同计算机上时,还存在一些问题。笔者邀请微软全球技术中心的BizTalk工程师协助。由于BizTalk工程师所用的测试环境在Windows域中,调试很顺利,而笔者的测试环境是工作组,在断断续续调试了一星期后,访问远程MQ服务器成功。笔者在这里写下适用于本地和远程的配置过程,供碰到类似问题的朋友参考。 

    配置BizTalk MQSeries 代理

    要使用MQSeries适配器,在安装软件时,需要先安装IBM WebSphere MQ 6.0(或5.3版本),然后在安装BizTalk Server 2006时选中MQSeries代理组件。在安装成功后通过“开始”菜单--“程序”--“Microsoft BizTalk Server 2006”--“BizTalk MQSeries 代理配置向导”来对MQ代理进行配置,也可以在命令行中运行“MQSConfigWiz.exe”启动配置向导,卸载配置可以通过“MQSConfigWiz.exe –u”命令完成。在“设置应用程序标识窗口”中选择“以下用户”单选按钮。输入管理员用户名和密码完成配置向导。在“开始”菜单“运行”中输入“DCOMCNFG.EXE”打开“组件服务”,如下图所示。 

    MQSAgent2就是通过向导生成的COM+应用程序,展开“角色”子节点,可以看到我们在设置向导中输入的Administrator用户。不管是远程还是本地,被BizTalk Server 适配器访问的IBM WebSphere MQ的计算机上都必须安装MQSeries 代理。

    配置MSDTC

    在相关的每台计算机(BizTalk Server和IBM WebSphere MQ)上进行如下操作,下面是在Windwos Server 2003上的操作步骤,
    1.单击“开始”,指向“控制面板”,然后单击“添加或删除程序”。
    2.在“添加或删除程序”对话框中,单击“添加/删除 Windows 组件”。
    3.在“Windows 组件”页上,选择“应用程序服务器”,然后单击“详细信息”。
    4.选择“启用网络 COM+ 访问”,单击“确定”,然后单击“下一步”。
    5.在“完成 Windows 组件向导”页上,单击“完成”。
    6.关闭“添加或删除程序”对话框。
    7.单击“开始”,依次指向“所有程序”、“管理工具”,然后单击“组件服务”。
    8.展开“组件服务”,然后展开“计算机”。
    9.右键单击“我的电脑”,选择“属性”,然后单击“属性”。
    10.选择“MSDTC”选项卡,然后单击“安全配置”。
    11.在“安全设置”窗格中,选中以下选项:
    网络 DTC 访问,  允许远程客户端,允许远程管理,允许入站,允许出站
    注意 在 Windows Server 2003 群集环境中,请确保选中“要求对呼叫方进行验证”。必须选择此事务模式。启用 XA 事务
    12.单击“确定”。
    13.在“DTC 控制台消息”对话框中,单击“是”重新启动 DTC。
    14.在“DTC 控制台消息”对话框中,单击“确定”确认 DTC 已重新启动。
    15.单击“确定”关闭“我的电脑属性”对话框。
    16.关闭“组件服务 MMC”。

    注意事项:
    事务管理器通信的三个单选项为
    要求对双方进行验证
    要求对呼叫方进行验证
    不要求进行验证

    针对该设置不同情况需要区别对待,不同的情况组合为
    (1) 安装的系统是Windows Server 2000版本、不带SP2的WindowsXP 、不带SP1的Windows 2003系统,带SP2的WindowsXP 、带SP1的Windows 2003系统。
    (2) Windows系统所在的计算机是在一个域中还是在多个域中,还是在工作组中。

    以上的设置不一定能够使MSDTC正常运行,比如系统防火墙的设置也有可能导致运行不正常,针对使用MSDTC出现的问题,可访问 http://go.microsoft.com/fwlink/?LinkId=61920寻找参考答案。

    配置 MQSAgent2 COM+ 应用程序

    在访问队列管理器时能够列出服务器队列管理器列表,在点击队列列表时出现“无法连接到队列管理器。该管理器不存在或尚未启动。”。

    造成该问题是由于MQSAgent2设置的应用程序标识权限不够造成。解决步骤如下:
    1.在COM+应用程序MQSAgent2节点中右键点击“属性”菜单,在属性窗口的‘高级’属性设置中,取消选定‘禁止删除’与‘禁止修改’选项。
    2.在COM+应用程序MQSAgent2的‘标识’属性设置中使用管理员用户。
    3.并确认在MQSAgent2“角色”子节点中包含在“标识”选项卡中输入的用户。
    4.在MQSAgent2节点中右键点击“关闭”菜单,再点击“启动”菜单使新设置启用。
    5.重启BizTalk服务,重新打开BizTalk管理控制台,此时则可选择远程队列管理器。

    在MQSeries适配器的队列定义中访问远程或本地MQSeries服务器时出现80070005错误。
    错误一:从计算机192.192.132.81为CLSID为{86E96D72-0011-4B28-B1AC-BF52AB47F1B4}的远程组件检索COM类工厂失败,原因是出现以下错误:80070005。
    错误二:无法将类型为“System.__ComObject”的COM对象强制转换为接口类型“Microsoft.BizTalk.Adapter.MQS.Agent.IMQSAdminQuery”。此操作失败的原因是对IID为“{DFF3C85A-9587-49DE-A4E3-6791F5FF4AB5}”的接口的COM组件调用QueryInterface因以下错误而失败:拒绝访问。(异常来自 HRESULT:0x80070005 (E_ACCESSDENIED))。

    出现这些问题是在非域环境中,访问远程COM+应用程序时权限检查失败导致。

    解决步骤如下:
    1.在组件服务控制台中,打开组件服务--我的电脑--属性--COM安全--启动和激活权限--编辑限制,加入ANONYMOUS LOGON账号,给予其远程启动和远程激活权限。
    2.在COM+应用程序MQSAgent2的‘高级’属性设置中,取消选定‘禁止删除’与‘禁止修改’选项。
    3.在COM+应用程序MQSAgent2的‘安全’属性设置中,取消选定‘对此应用程序强制进行访问权限检查’,并将‘调用的身份验证级别’设置为无。
    4.在MQSAgent2节点中右键点击“关闭”菜单,再点击“启动”菜单使新设置启用。
    5.重启BizTalk服务,重新打开BizTalk管理控制台,此时则可选择远程队列管理器。
    6.展开“组件服务”,然后展开“计算机”。右键单击“我的电脑”,选择“属性”,然后单击“属性”选择“默认属性”属性选项卡,在“默认身份验证级别”中选择“无”。

    其他资源

    对用于分布式访问的用户,建议把用户都加入到Windows的“Distributed COM Users”用户组。通过在注册表中添加下面的数据,

   [H_LOCAL_MACHINE\SOFTWARE\Microsoft\Ole] "ActivationFailureLoggingLevel"=dword:00000001 "CallFailureLoggingLevel"=dword:00000001

    然后重新启动系统来启用DCOM日志,这样在调试的时候如果出现错误可以在系统日志中看到DCOM日志信息。

0
相关文章