使用BizTalk Adapter for FTP

 
使用BizTalk Adapter for FTP
作者:郑佐
日期:2007-11-19
 
概述
BizTalk Server 2006 FTP Adapter 是属于比较常用的一类适配器,主要在于它部署简单,技术要求底,特别适合于数据量小,数据安全性不高的应用场合。典型的例子如现在的一些从事进出口业务的货代或船贷企业,自身可能没有比较强的IT技术部门,但是由于业务需要须向地方电子口岸或数据分中心以报文方式报送业务数据,FTP方式进行数据传输将是一种比较可行的方案。本文主要介绍使用FTP适配器时遇到的常见问题处理,配置设置以及一些不注意的功能介绍。
 
但是由于FTP协议本身的特点,在应用过程中会碰到一些不期望的问题。这个笔者在使用BizTalk Server 2006 FTP Adapter的时候深有体会,以至于在一些场合不得不考虑使用MQSeries适配器和MSMQ适配器。虽然FTP适配器存在一些问题,不过通过一些方式可以避免或减少问题的发生。最近笔者查了一些文档和咨询了微软的BizTalk工程师,基本上能掌握FTP适配器的应用。如果一些使用BizTalk Server FTP Adapter的朋友碰到类似问题以至于被困扰,不妨参考本文。文章的一些内容来自于BizTalk Server联机帮助文档,需要获得更多内容部分可以查看该文档。
 
常见错误
先来看看使用FTP适配器过程中出现的一些常见问题日志。在出现问题时BizTalk会写入EventLog一些警告或错误日志。以下是笔者收集的部分内容。
事件类型:    警告
事件来源:    BizTalk Server 2006
事件种类:    BizTalk Server 2006
事件 ID: 5740
日期:       2007-7-20
事件:       9:48:49
用户:       N/A
计算机: NBEPORT-BTS
描述:
适配器“FTP”返回一条错误消息。详细信息为“无法从 FTP 服务器接收文件“IM0717MH0013”。 ”。
 
有关更多信息,请参阅在 http://go.microsoft.com/fwlink/events.asp 的帮助和支持中心。
 
事件类型:    错误
事件来源:    BizTalk Server 2006
事件种类:    BizTalk Server 2006
事件 ID: 5719
日期:       2007-7-20
事件:       9:48:49
用户:       N/A
计算机: NBEPORT-BTS
描述:
执行接收管道时出错:“Microsoft.BizTalk.DefaultPipelines.PassThruReceive, Microsoft.BizTalk.DefaultPipelines, Version=3.0.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35”,源:“管道 ”,接收端口:“NBCFTP_FTPtoBTS.Manifest.ShippingAgency.AirManifest.H883Import”,URI:“ftp://139.139.10.100:21/idata”,原因: 无法从 FTP 服务器接收文件“IM0717MH0013”。
 
有关更多信息,请参阅在 http://go.microsoft.com/fwlink/events.asp 的帮助和支持中心。
 
事件类型:    警告
事件来源:    BizTalk Server 2006
事件种类:    BizTalk Server 2006
事件 ID: 5740
日期:       2007-7-16
事件:       14:57:32
用户:       N/A
计算机: NBEPORT-BTS
描述:
适配器“FTP”返回一条错误消息。详细信息为“与远程 FTP 服务器“6.97.200.111”的连接丢失。 ”。
 
有关更多信息,请参阅在 http://go.microsoft.com/fwlink/events.asp 的帮助和支持中心。
 
事件类型:    错误
事件来源:    BizTalk Server 2006
事件种类:    BizTalk Server 2006
事件 ID: 5719
日期:       2007-7-16
事件:       14:57:32
用户:       N/A
计算机: NBEPORT-BTS
描述:
执行接收管道时出错:“Microsoft.BizTalk.DefaultPipelines.PassThruReceive, Microsoft.BizTalk.DefaultPipelines, Version=3.0.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35”,源:“管道 ”,接收端口:“NBEPORTFTP_FTPtoBTS.Manifest.ShippingAgency.Manifest.H883Export”,URI:“ftp://6.97.200.111:21/cnc102/out”,原因: 与远程 FTP 服务器“6.97.200.111”的连接丢失。
 
有关更多信息,请参阅在 http://go.microsoft.com/fwlink/events.asp 的帮助和支持中心。
 
事件类型:    警告
事件来源:    BizTalk Server 2006
事件种类:    BizTalk Server 2006
事件 ID: 5740
日期:       2007-7-16
事件:       14:52:25
用户:       N/A
计算机: NBEPORT-BTS
描述:
适配器“FTP”返回一条错误消息。详细信息为“无法以用户“ftpusers”的身份连接到 FTP 服务器“192.192.132.164”。
  请验证地址和端口,并验证 FTP 服务器正在运行。 ”。
 
有关更多信息,请参阅在 http://go.microsoft.com/fwlink/events.asp 的帮助和支持中心。
 
事件类型:    警告
事件来源:    BizTalk Server 2006
事件种类:    BizTalk Server 2006
事件 ID: 5743
日期:       2007-7-20
事件:       8:03:31
用户:       N/A
计算机: NBEPORT-BTS
描述:
适配器无法传输要发往发送端口“BTStoNBEPORTFTP.H2KSubscription.NBC.DEC.RTX”(URL 为“ftp://6.97.200.111:21/dec/rtx/%SourceFileName%”)的消息。在为该发送端口指定的重试时间间隔过后,将会重新传输该消息。详细信息:“远程服务器拒绝了数据连接。
  请检查对远程系统的权限。 ”。
 
有关更多信息,请参阅在 http://go.microsoft.com/fwlink/events.asp 的帮助和支持中心。
 
数据重复读或数据丢失现象
对于这种情况微软有文档记载,以下来自联机帮助文档。
BizTalk Server 2006 FTP 适配器使用 FTP 客户端协议轮询指定的 FTP 服务器,并“按原样”从服务器检索数据。FTP 适配器不会对所检索的任何数据执行验证。FTP 适配器只是将检索到的文档发送到 BizTalk 消息引擎以进行处理,然后从 FTP 服务器中删除原始文档。如果 FTP 适配器从 FTP 服务器检索的文档仍在由主机应用程序进行写入,则检索到的文档将不完整。如果 FTP 适配器检索到原始文档的不完整副本,则可能会发生数据重复或数据丢失的情况,如下所述:
1 .如果原始文档仍在由主机应用程序写入 FTP 服务器,则 FTP 适配器将无法删除该文档,并将在为接收位置配置的下一轮询间隔期间检索到该文档的另一个副本。这一行为将导致出现文档重复。
2 .如果主机应用程序已完成将文档写入 FTP 服务器的过程,则该文档将被删除。这一行为将导致出现数据丢失。
 
针对以上问题,微软建议使用以下方法之一:
1 .将主机应用程序配置成向公共 FTP 文件夹所在硬盘上的一个临时文件夹中进行写入,然后定期将临时文件夹的内容移动到 FTP 文件夹中。临时文件夹应与公共 FTP 文件夹位于同一硬盘上,以确保移动操作为原子操作。原子操作是功能上无法分割的操作。如果您通过使用 BizTalk Server 2006 FTP 适配器将数据写入公共 FTP 文件夹,则配置发送端口时,可以通过在“FTP 传输属性”对话框中指定“临时文件夹”属性来实现。如果指定“临时文件夹”属性,请确保此文件夹与公共 FTP 文件夹位于同一物理磁盘上。
 
2 .将 FTP 接收位置配置为在主机应用程序不向 FTP 服务器写入数据的服务时段执行操作。可以在配置接收位置属性时指定该服务时段。
 
接收管道处理超时导致发布消息失败
对于该问题微软也提供了相关解释。
对 FTP 适配器接收的所有消息都要执行管道处理。
如果完成此处理的时间超出 FTP 连接超时值,则不能将消息发布到 Messagebox。这是因为 FTP 适配器在将消息发布到 Messagebox 之前,会尝试删除源 FTP 服务器上的原始消息副本。如果连接超时,则 FTP 适配器无法删除源 FTP 服务器上的消息副本,并会在 BizTalk Server 的应用程序日志中生成前面常见错误中显示的与接收位置相关的错误。
 
使用以下方法之一缓解此问题:
1 .增大连接超时值。将 FTP 服务器上的空闲超时值至少设置为处理该文件所需的时间。
2 .对接收位置使用“临时文件夹”功能。在这种情况下,FTP 适配器会将该文件复制到临时文件夹(通常为本地磁盘)。将文件复制到本地磁盘所需的时间少于通过管道运行消息并在 MessageBox 中持久化该消息所用的时间,这可以有效地缩短空闲时间。
 
FTP 适配器问题诊断
对于FTP适配器问题的诊断,主要手段是通过分析日志。日志分两部分,服务器端日志和客户机端日志。服务器端日志是指IIS FTPServer或其他第三方FTP服务器软件的运行日志。客户机端日志是指FTP接受适配器和FTP发送适配器记录的日志。
以IIS FTP服务器为例,打开“Internet信息服务(IIS)管理器”控制台,选择“默认FTP站点”,右键菜单选择“属性”。在“FTP站点”选项卡上选择“启用日志记录”复选框,来启用日志记录功能,并且可以对日志的输出进行高级设置。不管是源 FTP 服务器或目标 FTP 服务器的日志文件中都有可能包含对解决 FTP 适配器问题有帮助的信息。默认情况下,Windows Server 或 Windows XP 计算机上的 FTP 日志文件位于下列目录中:
%WinDir%/system32/LogFiles/MSFTPSVC1/
日志文件名为:exyymmdd.log
 
对于FTP接收适配器或FTP发送适配器BizTalk都提供了日志记录功能。前者对应接收位置,后者对应发送端口。对于接收位置,在“接收位置属性”对话框的“常规”选项卡中,打开“FTP传输属性”对话框,对“日志”属性进行设置。对于发送端口,打开在“发送端口属性”对话框的“常规”选项卡中,打开“FTP传输属性”对话框,对“日志”属性进行设置。在“日志”属性对应的值中,输入保存日志文件副本的完整路径。此文件用来在通过FTP发送/接收文件时诊断错误条件。在报文通过FTP适配器接收或发送的过程中FTP适配器会将详细的日志信息保存到指定日志文件中。
 
主机和主机实例
对于在BizTalk Group 中有多个服务器的情况下如果设置不当,就会出现一些麻烦。比如有3台处理服务器,默认加入到同一个组后会只有一个进程内主机BizTalkServerApplication。同时该主机对应三个主机实例分别映射到3台物理服务器。打开BizTalk Server 2006 管理控制台,选择平台设置可以确认这一点。另外,在平台设置的适配器中选择FTP,可以看到发送处理程序和接收处理程序都是BizTalkServerApplication。对于业务流程的处理使用默认主机将是非常有效率的一种设置,支持高并行处理,但是这样的设置对于FTP适配器可能会存在问题。在3个主机实例同时起来的情况下,FTP适配器工作就会不正常(这里不只是FTP适配器另外有些BizTalk适配器也会有并发的问题)。正确的做法是为FTP适配器专门建立一个逻辑主机,为该逻辑主机映射一个主机实例,这里如果有3台服务器,可以建立3个主机分别映射到3个主机实例,接着可以为FTP适配器添加3个发送处理程序和3个接收处理程序,避免服务器层面的并发处理。
 
FTP 相关权限设置
在使用FTP适配器的时候需要考虑客户端和服务器端的权限设置。
在服务器端,以IIS FTP服务器为例,选择默认FTP站点,点击右键选择“权限”,在设置对话框中可以添加相应的Windows组和用户,以授权FTP服务器的访问,同时对于虚拟目录也可以进行设置。如果是NTFS格式的文件系统。FTP对应的物理目录需要设置其属性中的安全选项卡,添加FTP访问用户或用户组使其具有访问该目录的权限。
在对FTP发送适配器或FTP接收适配器进行配置的时候,需要设置相应的用户名和密码,而该用户名和密码对应FTP服务器上的设置。对于发送端口,FTP适配器的临时文件夹为FTP站点上的远程临时文件夹,用于传输失败后恢复。如果没有权限访问该文件目录,需要进行相应的授权设置。对于接收位置的FTP适配器中的临时文件夹为本地临时文件夹,用于传输失败后的恢复。如果没有权限访问该文件夹,也需要进行相应的授权设置。
 
文件名称宏的应用
使用过BizTalk的技术人员都知道可以在文件发送适配器配置中使用文件名宏。有一次笔者向微软BizTalk工程师咨询一个FTP适配器问题的时候,他看到我对FTP发送适配器配置了文件名宏,觉得很意外,他没用过这个功能。确实,我查过BizTalk Server 2006联机帮助文档没有发现FTP支持文件名宏的说明,笔者也是不过不经意间使用了该功能。
如果存在以下任何一种情况,文件发送处理程序将不会使用值替换宏:
1 .未设置相应的系统属性。
2 .宏拼写错误。
3 .宏的值所包含的符号在文件名中无效。
 
如果出现上述任何情况,文件发送处理程序都会将文件名中的宏保持不变,例如 Myfile_%MessageID%.xml。
 
下表列出了所支持的宏,并介绍文件或FTP发送处理程序如何替换这些宏:
宏名称
替代值
%datetime%
YYYY-MM-DDThhmmss 格式的世界时 (UTC) 日期时间(例如 1997-07-12T103508)。
%datetime_bts2000%
YYYYMMDDhhmmsss 格式的 UTC 日期时间,其中,sss 表示秒和毫秒(例如,199707121035234 表示 1997/07/12 10:35:23 和 400 毫秒)。
%datetime.tz%
本地日期时间加上 GMT 时区,格式为 YYYY-MM-DDThhmmssTZD(例如 1997-07-12T103508+800)。
%DestinationParty%
目标参与方的名称。该值来自消息上下文属性 BTS.DestinationParty。
%DestinationPartyQualifier%
目标参与方的限定符。该值来自消息上下文属性 BTS.DestinationPartyQualifier。
%MessageID%
BizTalk Server 中消息的全局唯一标识符 (GUID)。该值直接来自消息上下文属性 BTS.MessageID。
%SourceFileName%
文件适配器从中读取消息的文件的名称。文件名包括扩展名,但不包括文件路径,例如 Sample.xml。在替代此属性时,文件适配器从 FILE.ReceivedFileName 上下文属性中存储的绝对文件路径提取文件名。如果上下文属性没有值(例如,如果消息是在文件适配器之外的其他适配器上接收到的),则将不替代该宏,并在文件名中按原样保留该宏(例如 C:/Drop/%SourceFileName%)。
注意 
此宏的正确实现需要输出消息与收到的消息为同一个消息。
%SourceParty%
文件适配器从其接收消息的源参与方的名称。
注意 
此宏的正确实现需要输出消息与收到的消息为同一个消息。
%SourcePartyQualifier%
文件适配器从其接收消息的源参与方的限定符。
注意 
此宏的正确实现需要输出消息与收到的消息为同一个消息。
%time%
hhmmss 格式的 UTC 时间。
%time.tz%
本地时间加上 GMT 时区,格式为 hhmmssTZD(例如 124525+530)。
 
总结
在BizTalk Server 2006提供的几个基本适配器中,FTP适配器和文件适配器是属于比较简单的一类适配器,因此使用得比较多,不过在使用过程中对于适配器的一些设置还是需要注意,如果设置不当可能会产生一些意想不到的问题。在出现一些问题的时候建议BizTalk开发或运维人员从日志入手,这样能够比较容易找到问题所在,从而解决问题。
 
 

你可能感兴趣的:(windows,server,FTP服务器,服务器,文档,IIS)