Focus on biztalk -- chnking

心无旁骛,专注于biztalk......

  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
  80 随笔 :: 0 文章 :: 543 评论 :: 75 引用

学习biztalk的最好文档就是biztalk的随机文档,文档中包括一套循序渐进的教程(tutorial)还有许多就某一单项技术的samplesamples in the SDK)。这些教程和例子描述的步骤十分的详细,详细到你什么都不用想照它的步骤一步步的做都可以了。

教程步骤太详细,而且往往只告诉你怎么做,很少告诉你为什么这么做,有朋友经常跟着教程一路做下去,最后作完了,测试ok通过,回过头来想想自己都做了什么,一片茫然,不知怎么做的结果就出来了。如果做的顺利(每个步骤没有遗漏,没有做错),就会出正确的结果,一旦中间哪个步骤遗漏了或哪里错了一点,导致没出正确的结果,就不知道怎么找错在哪了。

所以跟着教程做时一定要注意几点:

l         每一步都仔细的做,不要有遗漏步骤,不要敲错字符。

l         每一步都要搞明白为什么这么做,如果不清楚,每一步都会提供一些相关内容的连接,先把相关的技术内容清楚个大概,知道怎么回事,再继续下一步。

l         要学会使用biztalk管理器查看服务实例,消息,特别是挂起的服务实例(可以在流程调试器中单步调试orchestration),如果出现结果不是预期的,在这里查找错误原因。

最近在做biztalk2006随机文档中的tutorial例子,tutorial1tutorial2已经做完,问题不大,按照说明一步步的做就是了。

在做tutorial3时碰到了一些问题,在此把我做的过程中碰到的问题和解决的方法记录下来,供还没做过的朋友参考。

Tutorial3这个示例延续tutorial2示例,在tutorial2基础上继续往下做。所以必须在完成tutorial2后才能开始tutorial3

Tutorial3涉及的主要技术有:相关集、orchestration发送端口消费web servicesorchestration接收端口发布为web services

1.       lesson 3step 1 中“配置发送PO到供货商web services的端口”

这一步的最后,tutorial漏了一个操作:在“绑定端口”窗口,在“端口绑定”下拉列表中选择“现在指定”,系统会自动生成一个指向供货商web services的物理发送端口,并把这个逻辑端口跟这个物理端口绑定。如果这个操作没做,在以后的步骤配置应用程序的这个逻辑端口对应的物理端口时会找不到SendCommonPO_SendPort端口。当然,也可以在配置应用程序时新建一个物理端口指向供货商web services

当在biztalk项目中引用一个外部web services,即orchestration使用消费(consumeweb services时, biztalk给这个web services生成相应的消息类型,为多部分消息类型。每个web services方法涉及的输入输出参数都被生成相应的消息类型。

当在biztalk项目中引用一个外部web services时,biztalk同时给这个web services生成相应的web端口类型,跟web services方法对应,每个.asmx文件生成一个端口类型,每个方法生成一个端口中的操作,方法的输入参数和返回参数分别生成操作消息,这些操作消息就是上面生成的那些多部分消息类型。

配置orchestration中跟web sevices相连的逻辑端口的端口类型为上面引用web services系统生成的web 端口类型。

同时还要注意,发送到连接web sevices的逻辑端口的消息实例的类型要是web message type,即是从web services引用过来的消息类型,这样才能跟发送端口的端口类型匹配。在配置消息实例时,在消息类型下拉列表中“web message type”下选“select from referenced assembly”,然后在弹出的窗口中选择相应的web message类型。

2.       发布web services向导生成了web services,但是实例中并没有使用用向导生成的web services

示例中有两个orchestration的接收端口需要发布为web servicesReceiveASN_PortReceiveInvoice_Port,文档中也在步骤四用web services发布向导生成了对应这两个端口的web services,但是在实际中并没有使用向导生成的web services,而是使用了预先准备好的预先生成好的web services,这个web services放在路径“C:\tutorial\Solutions\B2BSolution\B2BOrchestrations_webservice”中,并在tutorial 2 中“步骤4: 设置供货商的Web Service中”配置到IIShttp://localhost/B2BOrchestrations_webservice虚拟目录下。而用web services发布向导生成了web servicesurl http://localhost/B2BOrchestrations_Proxy

所以文档中在web services的最后一步,没有设置给应用程序生成相应的接收位置,而是在biztalk管理器中手工新建接收位置以对应到http://localhost/B2BOrchestrations_webservice

就因为使用了在别的机器上预先生成的web services,所以才有了“第二步:更新token”。因为是在别的机器用向导做的web services,在生成web services时要引用包含orchestrationassemblyassembly有自己的token,所以它需要把每个试验者给assembly生成的token替换它预先生成的web services中使用的token。如果使用自己用向导生成的web services,引用的assembly就是要使用的那个assembly,就没必要更新token,这一步是不必要的一步。这一点文档上没有说明这一点,很容易产生误导。

3.       向导生成的web services很大机会不能正常工作

biztalkweb services发布向导生成的web services很大的机会是不能正常工作的,反正我每次用向导做出来的web services工作都是不正常,也有好些朋友反应同样的问题。

具体现象是生成的web services不会有返回结果,在事件查看器中往往有这样的错误:试图连接到服务器“xxxxxx”上的“BizTalkMgmtDbSQL Server 数据库失败。 错误:“无法打开登录所请求的数据库 "BizTalkMgmtDb"。登录失败。”

关于这个问题,请参看我的一篇专门讨论这个问题的文章:Biztalk发布web服务时遭遇'SoapExceptionInternal SOAP Processing Failure'错误

0
0
(请您对文章做出评价)
« 上一篇:windows 2003服务器配置VPN实现各种网络环境VSS协同开发
» 下一篇:biztalk中使用信封(Envelope)消息
posted on 2007-01-09 15:55 chnking 阅读(2155) 评论(17)  编辑 收藏 所属分类: biztalk

评论

#1楼 2007-01-09 17:29 Robert Lee      
我怎么突然觉得“随机文档”这个名称很奇怪呢
文档是Random的吗 :D
Just joking...

  回复  引用  查看    

#2楼 2007-01-10 19:32 rt[未注册用户]
教程步骤太详细,而且往往只告诉你怎么做,很少告诉你为什么这么做,有朋友经常跟着教程一路做下去,最后作完了,测试ok通过,回过头来想想自己都做了什么,一片茫然,不知怎么做的结果就出来了。
---------------
同感

  回复  引用    

#3楼 2007-01-19 20:52 JSF[未注册用户]
各位做例子1的时候没有问题吗?我做的时候是,文件进去了没有结果出来,找也找不出错,卡着郁闷死人。有碰到过这现象的吗?
  回复  引用    

#4楼[楼主] 2007-01-20 14:48 chnking      
to JSF

“我做的时候是,文件进去了没有结果出来”,到了这一步说明文件已经被file适配器读取。
在biztalk管理器中查看挂起的实例,然后看示例挂起的原因,把原因贴出来。

  回复  引用  查看    

#5楼 2007-01-21 21:02 JSF[未注册用户]
不会用管理器查看实例,好像只有事务日志文件。另外,发现输入时文件里的变量名有点差异,然后就没有结果了。我整了个很简单的直接输出的例子,就可以通过了。
  回复  引用    

#6楼[楼主] 2007-01-24 22:15 chnking      
事件查看器中也有事件产生,把详细信息贴出来
  回复  引用  查看    

#7楼 2007-09-13 09:49 toto233[未注册用户]
@chnking
对于tutorial 3 我按照 例子并没有成功完成,在webservice返回信息时通过pipe时报错,错误信息如下,帮忙分析下哪里的问题,谢谢!


There was a failure executing the receive pipeline: "Microsoft.BizTalk.DefaultPipelines.XMLReceive, Microsoft.BizTalk.DefaultPipelines, Version=3.0.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" Source: "XML disassembler" Receive Port: "ASN_ReceivePort" URI: "/B2BOrchestrations_WebService/B2BOrchestrations_B2BProcess_ReceiveASN_Port.asmx" Reason: The document specification <B2BSchemas.AdvancedShipNotice> from assembly <B2BSchemas, Version=1.0.0.0, Culture=neutral, PublicKeyToken=f5f7841d15c6dc86> failed to load. Verify the schema for this document specification is deployed and is in the Global Assembly Cache.

  回复  引用    

#8楼[楼主] 2007-09-13 10:31 chnking      
根据它的提示,检查在GAC中有没有B2BSchemas, Version=1.0.0.0, Culture=neutral, PublicKeyToken=f5f7841d15c6dc86这个assembly,特别注意比较PublicKeyToken是否一致
  回复  引用  查看    

#9楼 2007-09-14 10:31 toto233[未注册用户]
@chnking
谢谢,不过我还是对一些东西很困惑,望解答

1. BizTalk 生成WebService时,是仅仅生成个接口,用来调用WebService程序么?

2. 例程3
第2步更新Token 更新的是 (别人机器上的)BizTalk WebService向导生成的 Web项目 中 关于本机BizTalk 程序 的Token?

3. 我出现错误如果是因为没有更新那个Token是不是WebService 不能调用BizTalk服务器中的程序。

  回复  引用    

#10楼[楼主] 2007-09-14 11:00 chnking      
1、BizTalk 生成WebService时,不仅仅是生成了接收端口,还要生成web sevices,web sevices中对外暴露的方法内部要跟接收端口接口。
2、文章中说的比较清楚的,tutorial3之所以会有更新token的步骤,是因为教程中使用的web sevices不是自身向导做的,如果是自身向导做的web sevices,那就没必要更新token了。
3、没错了

  回复  引用  查看    

#11楼 2007-09-27 11:43 剑飘红      
用 Network service帐户也可以。许多步骤与lz的一样就可以了。关键的是这个帐户也要具有操作数据库的权限。biztalk方面的数据库
  回复  引用  查看    

#12楼 2007-09-27 11:44 剑飘红      
版主的文章每篇我都仔细看过,受益匪浅
  回复  引用  查看    

#13楼 2007-10-24 15:04 fantasy_kli      
tutorial3有一个小问题,我忘了当时怎么解决的,查了很多资料
  回复  引用  查看    

#14楼 2007-10-30 16:58 horse[未注册用户]
@chnking
你好,我是刚刚才开始学习Biztalk的,用的是2006,在做Tutorial3时出现了下面的错误,麻烦你抽空指点指点,谢谢。
执行接收管道时出错:“Microsoft.BizTalk.DefaultPipelines.XMLReceive, Microsoft.BizTalk.DefaultPipelines, Version=3.0.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35”,源:“XML 拆装器”,接收端口:“Invoice_ReceivePort”,URI:“/B2BOrchestrations_WebService/B2BOrchestrations_B2BProcess_ReceiveInvoice_Port.asmx”,原因: 无法从程序集 <B2BSchemas, Version=1.0.0.0, Culture=neutral, PublicKeyToken=f5f7841d15c6dc86> 加载文档规范 <B2BSchemas.CommonInvoice>。请验证已部署此文档规范的架构并且该架构位于全局程序集缓存中。

  回复  引用    

#15楼[楼主] 2007-10-30 18:47 chnking      
@horse
检查<B2BSchemas, Version=1.0.0.0, Culture=neutral, PublicKeyToken=f5f7841d15c6dc86>这个程序集有没有部署到GAC中。biztalk引用的程序集都必须加载到GAC才能调用。

  回复  引用  查看    

#16楼 2007-10-31 08:44 horse[未注册用户]
@chnking
非常感谢你能回答我的问题,请问如何查看GAC中的内容,我在网上查了一下,说是在C:\Windows\Assembly\GAC中,但是没有找到。还有我明明没有用这个版本的程序集了,我已经重新生成了一个.snk文件且在工程中更新了之前的,并手动将B2BSchemas项目和B2BOrchestrations项目属性中的版本号改成了2.0.0.0了,并且也取消部署,再重新部署了,重新将该业务流程发布成WebSevices,并且也更新了供应商的引用。但程序还是调用<B2BSchemas, Version=1.0.0.0, Culture=neutral, PublicKeyToken=f5f7841d15c6dc86>
具体情况是这样的:
  我在Tutorial2做成功了,但是做Tutorial3的第三课的时候,之前是按照教程上的做法,但是没有成功,后来做了如下的更改:
1、将SendCommonPO_Port端口改成“立即指定”;
2、在配置并启动程序的时候将SendCommonPO_Port端口为默认的(教程上说是新建一个SendCommonPO_SendPort)。

  可能表述上不是很清楚,总的说就是如果将部署在GAC中的程序集更新。非常感谢。

  回复  引用    

#17楼[楼主] 2007-10-31 09:14 chnking      
@horse

“总的说就是如果将部署在GAC中的程序集更新”
关于程序集部署到GAC的部分,请参看:《开发环境中biztalk项目设置注意事项 》(http://www.cnblogs.com/chnking/archive/2007/02/03/639051.html)的第四部分“ 非biztalk项目的部署”

  回复  引用  查看