在开始开发BizTalk项目的时候,一些开发者会碰到许多基础问题,本文对这些常见问题进行罗列,其中有个别问题笔者向微软的BizTalk工程师寻求了问题解决方案,旨在让使用BizTalk的朋友更快的进行开发。文中的内容基于BizTalk Server 2006和Visual Studio 2005。
1. 在多列结果上不支持数据流
错误信息:
适配器“SQL”返回一条错误消息。详细信息为“HRESULT="0x80004005" Description="在多列结果上不支持数据流"”。
解决方法:
可能解决的情况是对SQL查询语句或存储过程加上“FOR XML AUTO--,/*ELEMENTS,*/--XMLDATA”。
2. 缺少根元素
错误信息:
执行发送管道时出错:“Microsoft.BizTalk.DefaultPipelines.XMLTransmit, Microsoft.BizTalk.DefaultPipelines, Version=3.0.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35”,源:“XML 组装器”,发送端口:“SendPort_DataToXXX”,URI:“C:\Messages\Test\Create\%MessageID%. xml”,原因: 缺少根元素。
解决方法:
出现这种问题最大的可能性是在生成输出的Xml文件时出错导致格式错误。在使用BizTalk 过程中使用架构映射文件(.btm)进行xml变换时会遇到这个问题。解决办法就是确认源架构文件(.xsd)和目标架构文件设置的目标命名空间是否正确。通过在vs.net的解决方案资源管理器的btm文件上点击右键菜单选择属性进行输入输出的设置,再通过右键菜单进行“测试映射”或“验证映射”来检查正确性。
3. 重新部署BizTalk应用程序无法刷新服务器运行实例
描述信息:
对BizTalk Server应用程序项目修改后通过vs.net2005进行重新部署到BizTalk服务器,结果BizTalk应用程序无法刷新服务器运行实例,还是运行上一个版本的程序。
解决方法:
a.在重新部署修改后的应用程序前,必须先停止BizTalk Server上的对应用程序实例。
b.通过vs.net部署程序。
c.在BizTalk Server 2006的管理器里的组节点下面的应用程序节点右键点击刷新菜单。
d.打开系统服务管理器找到“BizTalk Server 应用程序服务”,对其进行重新启动。
e.在BizTalk Server 2006的管理器中启动部署的应用程序。
4. 在vs.net 2005中无法自动刷新程序集引用
描述信息:
在vs.net 2005中,对被引用程序集的修改,无法在引用它的项目中进行自动刷新。
解决方法:
http://support.microsoft.com/default.aspx?scid=kb;en-us;313512
5. 验证架构文件(.xsd)出现错误 BEC2004
错误信息:(VS2005输出的错误信息有点读不通)
C: \测试目录\EntryDatasingle.xml: 错误 BEC2004: 元素命名空间“http://namespace-url”中的“[xml根目录]”。 的子元素命名空间“http://namespace-url”中的“ENTRY_CONTAINER”。无效。应为可能元素的列表: “某个子元素”。
解决方法:
在VS.net中打开架构文件,选中<Schema>,在属性窗口中。设置Element FormDefault值为Qualified,设置Attribute FormDefault值为Unqualified。详细可以访问http://blog.csdn.net/zhzuo/archive/2006/08/02/1011031.aspx。
6. 通过vs.net部署应用项目提示“无法添加资源”
错误信息:
无法添加资源。 存储区中已存在资源(-Type=“System.BizTalk:BizTalkAssembly” -Luid=“BizTalkTestProject1, Version=1.0.0.0, Culture=neutral, PublicKeyToken=3a57bb41dbe2b5dc”),并且该资源与另一个应用程序或另一种类型相关联。
解决方法:
在vs.net中打开BizTalk浏览器,找到前次部署的应用程序对应的程序集,右键点击取消部署,再次通过vs.net进行部署操作。
7. 只能在原子作用域或服务中声明非序列化对象类型
错误信息:
只能在原子作用域或服务中声明非序列化对象类型“System.Xml.XmlNodeList XmlEntryDataNodeList” E:\vs2005projects\BizTalk2006Projects\BiztalkTestSolution\SqlMQTest\SendEntryXXXProcess.odx
解决办法:
一种方式是把非序列化对象类型定义到原子作用域中,另一种方式设置事务类型为无或把整个编排事务类型设置为原子。
8. 消息引擎无法从数据库检索配置。详细信息:“c0002a1f”
错误信息:
消息引擎无法从数据库检索配置。详细信息:“c0002a1f”。
解决办法:
可能的原因,数据库访问出现问题。未仔细确认,最终解决方案是重新安装BizTalk Server。
9. 日志项字符串太长。写入事件日志的字符串不能超过 32766 个字符
错误信息:(错误日志比较长,列出一部分)
未捕获的异常(请参阅下面的“内部异常”)已经挂起服务
内部异常: 日志项字符串太长。写入事件日志的字符串不能超过 32766 个字符。
异常类型: ArgumentException
源: System
目标站点: Void InternalWriteEvent(UInt32, UInt16, System.Diagnostics.EventLogEntryType, System.String[], Byte[], System.String)
解决办法:
出现这种情况可能的原因是接收适配器一次性获取的数据量太大。笔者测试通过SQL适配器接收2500条记录在业务编排中处理时出现该问题。设置数据量在100条运行恢复正常。
10. BizTalk Server 2006安装问题
安装文档:
http://www.microsoft.com/downloads/details.aspx?FamilyID=b273269c-97e0-411d-8849-5a8070698e4a&DisplayLang=zh-cn
11. 设置MQSeries传输属性的队列定义,队列管理器失败
错误信息:
从计算机192.168.0.10为 CLSID为 {86E96D72-0011-4B28-B1AC-BF52AB47F1B4}的远程组件检索COM类工厂失败,原因出现以下错误:80070005。
解决办法:
http://blog.csdn.net/zhzuo/archive/2006/07/07/890030.aspx
12. 非法尝试更新消息“Message_XXX”的只读属性值
错误信息:
未捕获的异常(请参阅下面的“内部异常”)已经挂起服务 “BizTalkServer2006Test.SendNbEportEntryDataProcess(614fa04f-8968-ef95-952b -11c74450b870)”的一个实例。在管理性地恢复或终止该服务实例前,它将保持挂起状态。如果恢复了该服务实例,它将从上次持续的状态继续,这可能再次引发同样的异常。实例 ID: 7f064588-f7a1-4dc0-b7f7-180163b04b61形状名称: Construct_SendData形状 ID: c5e435bc-cbbb-48b5-89df-a97ebe0fbee4引发异常的位置: 段 2,进程 15内部异常: 非法尝试更新消息“Message_SendNbEport”的只读属性值(名称:“http: //schemas.microsoft.com/BizTalk/2003/system-properties”、命名空间: “MessageID”)。
异常类型: PropertyUpdateDisallowedException
源: Microsoft.XLANGs.Engine
目标站点: Void ReadonlyPropertySetter(Microsoft.XLANGs.Core.XMessage,Microsoft.XLANGs.BaseTypes.XmlQName, System.Object)
解决办法:
该错误为修改只读的MessageID属性引起,修改设置该属性的代码。比如下面的例子。
Message_XXX(BTS.MessageID) = System.DateTime.Now.ToString("yyyyMMddHHmmss");
13. 使用SQL适配器发送数据提示“新事务不能登记到指定的事务处理器中”
错误信息:
适配器无法传输要发往发送端口“SendPort_InsertList”(URL 为“SQL://192.168.0.2/H_IMS_RECV/”)的消息。在为该发送端口指定的重试时间间隔过后,将会重新传输该消息。详细信息: “新事务不能登记到指定的事务处理器中。 ”。
解决办法:
http://go.microsoft.com/fwlink/?LinkId=61920
http://support.microsoft.com/kb/Q899191
14. 分步启动BizTalk Server 2006应用程序出错
错误信息:
提示部分依赖项没有启动等信息。
解决办法:
先启动发送端口,再启动业务流程,最后启动接收位置。
添加SQL适配器元数据提示“无法执行SQL语句。请确保提供的语法正确。”
错误信息:
在点击BizTalk项目右键菜单中选择->添加->添加生成的项->添加适配器元数据启动添加适配器向导。在SQL传输架构生成向导对话框中选择存储过程,点击生成按钮后,单击下一步按钮出现“无法执行SQL语句。请确保提供的语法正确。新事务不能登记到指定的事务处理器中。”的错误信息。
解决办法:
可能的一种情况是在添加的元数据端口类型为“接收端口”时,选择的存储过程没有返回架构元数据。可以修改该存储过程对SELECT语句加上“FOR XML AUTO /*,LEMENTS*/,XMLDATA”语句使其返回元数据,在生成后再去掉该语句。
15. 添加SQL适配器元数据提示“无法执行SQL语句。请确保提供的语法正确。新事务不能登记到指定的事务处理器中。”
错误信息:
在点击BizTalk项目右键菜单中选择->添加->添加生成的项->添加适配器元数据启动添加适配器向导。在SQL传输架构生成向导对话框中选择存储过程,点击生成按钮后,单击下一步按钮出现“无法执行SQL语句。请确保提供的语法正确。新事务不能登记到指定的事务处理器中。”的错误信息。
解决办法:
http://support.microsoft.com/kb/Q899191
16. 在基于内容的消息路由中提示“无法路由发布的消息,因为找不到订户”
错误信息:
错误详细信息: 无法路由发布的消息,因为找不到订户。如果订阅业务流程或发送端口尚未登记,或者订阅评估必需的某些消息属性尚未升级,就会出现此错误。请使用 Biztalk 管理控制台排除此故障。 解决办法:
可能的解决办法,在没有使用业务流程编排的项目中,在发送端口的筛选器设置,
属性:BTS.ReceivePortName
运算符:==
值:[接收端口名称]
分组依据:与
17. 执行接收管道时出错,没有任何拆装 阶段组件可识别该数据
错误信息:
接收位置“Receive Location1”(URI 为“E:\test\test_Input\*.*”)上的适配器“FILE”接收的消息已挂起。错误详细信息: 执行接收管道时出错:“Microsoft.BizTalk.DefaultPipelines.XMLReceive, Microsoft.BizTalk.DefaultPipelines, Version=3.0.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35”,源:“XML 拆装器”,接收端口:“ReceivePort1”,URI:“E:\test\test_Input\*.*”,原因: 没有任何 拆装阶段组件可识别该数据。
解决办法:
在接收文件目录中放入一个非xml文件,在接收端口中设置拆装器为 “Microsoft.BizTalk.DefaultPipelines.XMLReceive”所导致,如果是处理平文件,调整接收管道为 “Microsoft.BizTalk.DefaultPipelines.PassThruReceive”。如果是xml文件,检查xml格式是否有误。
18. 执行发送管道时出错,原因: 根级别上的数据无效
错误信息:
执行发送管道时出错:“Microsoft.BizTalk.DefaultPipelines.XMLTransmit, Microsoft.BizTalk.DefaultPipelines, Version=3.0.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35”,源:“XML 组装器”,发送端口:“SendPort1”,URI:“E:\[测试报文]\预定数据到分中心\test_Output\% SourceFileName%”,原因: 根级别上的数据无效。 行 1,位置 1。
解决办法:
同第17个问题相似,在发送端口中发送管道的设置的问题,如果是处理平文件,调整发送管道为“Microsoft.BizTalk.DefaultPipelines.PassThruTransmit”。如果是xml文件,检查xml格式是否有误。
19. 配置MQSeries适配器的队列定义信息选择本地服务器队列管理器出错
错误信息:
服务器 localhost 上未安装或未正确配置适配器。COM异常:从计算机localhost为CLSID为{86E96D72-0011-4B28-B1AC-BF52AB47F1B4}的远程组件检索COM类工厂失败,原因是出现以下错误:80040154。
解决办法:
确认是否运行过BizTalk MQSeries 代理配置向导,如果没有通过开始菜单->程序-> Microsoft BizTalk Server 2006->BizTalk MQSeries 代理配置向导来进行设置。另外需要注意MSDTC的安全配置,以Windows Server 2003为例,在开始菜单的运行中输入dcomcnfg命令打开组件服务控制台,展开左边的组件服务下面的计算机、我的电脑右键菜单属性选择MSDTC选项卡,点击安全配置按钮,调整安全配置,具体的配置可以看http://blog.csdn.net/zhzuo/archive/2006/07/07/890030.aspx。
20. 通过MQSeries适配器发送消息提示访问被拒绝
错误信息:
适配器无法传输要发往发送端口“SendPort1”(URL 为“MQS://localhost/nbeport_zz_test/zz_test_queue”)的消息。在为该发送端口指定的重试时间间隔过后,将会重新传输该消息。详细信息:“The adapter has encountered an 'Access Denied' error while attempting to contact the COM+ object on the MQSeries server. Ensure the BizTalk account is added to the Role on the MQSAgent COM+ application.”。
解决办法:
以Windows 2003 Server为例,在开始菜单的运行中输入dcomcnfg命令打开组件服务控制台,展开左边的组件服务下面的计算机->我的电脑->COM + 应用程序->MQSAgent2->角色->CreatorOwner->用户->右键菜单新建->用户-> 添加BizTalk Server Administrators组用户和BizTalk Application Users组用户。返回到MQSAgent2节点右键->禁用->启用->启动。如果还是出现问题请重新启动计算机。具体的配置可以看http://blog.csdn.net/zhzuo/archive/2006/07/07/890030.aspx。
21. 在应用程序日志中出现“文件系统连接器中发生错误”
错误信息:
文件系统连接器中发生错误。请查看详细信息。Cant make a connection to \\Test-11\EDIDocsHome\Documents\PickupEDI. Errormessage: The operation cannot be performed because a network component is not started or because a specified name cannot be used.Foldername: \\NBEPORT-MQ\EDIDocsHome\Documents\PickupEDI, Errormessage: The operation cannot be performed because a network component is not started or because a specified name cannot be used.
解决办法:
该问题为访问PickupEDI目录权限不够引起,可以设置目录属性的安全来解决。