none
Biztalk Orchestration中如何对webservices进行异步调用 RRS feed

  • 问题

  • 大家好,

           Biztalk Orchestration中如何对webservices进行异步调用?我可以使用“Send-Receive”的Port来调用webservices,但好像这种方式是同步的,因为我在管理控制台中看到“主流程”调用webservices时,“主流程”的状态并不是“Dehydration”,我这样理解正确吗?如果正确请问如何进行异步调用?有什么tutorial或例子吗?谢谢。

    2008年10月28日 9:40

答案

  • tutorial3中的异步方式就是Secle说的方式,“ReceiveASN_Port”和“ReceiveInvoice_Port”这两个Port其实是这个orchestration对外发布的web services。
     
    文档里注释是是写着“This code was generated by a tool. “,其实在tutorail中的每一操作步骤显示是用发布web services向导做的。
     
    “tutorial3中应该使用发布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,这一步是不必要的一步。这一点文档上没有说明这一点,很容易产生误导。”

    2008年10月31日 15:41

全部回复

  • WebServices调用可以异步,不过设计上就有些差异了,,

     

    首先BizTalk发送端口需要调用一个外部的WebServices,即实现发送Request(此时也可以理解为不处理该WebServices的返回结果)

    然后还需要将BizTalk一个接收端口对外发布为WebServices,供外部调用,用以实现接收Response。

     

    不过这样部署上就会要复杂下,,BizTalk程序和接口程序必须相互调用。。而且还可能需要使用相关集等功能。

     

     

    2008年10月28日 12:24
  • biztalk是没有直接支持web services的异步调用,可以采用变通方法,楼上Secle版主提出了一个方案,还有一个方案可以参考,使用self Correlating来实现,如下图:
     

     

     

    1. 使用start orchestration形状启动一个子流程,同时把实际要调用web services的消息作为参数传给子流程
    2. 子流程的作用就是调用一个web services,然后把结果返回到主流程
    3. 主流程接收子流程返回的接收端口设置为Self Correlating的直接绑定的接收端口
    4. 主流程跟子流程之间是异步的关系,主流程启动子流程后继续运行,直到遇到等待接收子流程返回的接收形状。
     
    2008年10月28日 13:06
  • 谢谢两位指点!

    后来,我还发现一种异步调用的方法,在Biztalk 附带的tutorial3中,流程图如下:

     

     

    在Send_CommonPO中调用webservices,这个是One-Way的调用,然后可以中该webservices进行业务逻辑或数据处理,

    然后再在该webservices中分别调用“ReceiveASN_Port”和“ReceiveInvoice_Port”这两个Port所“指向”(绑定)的webservices——通过“Correlation Set”来接收消息。

     

    但我不清楚“ReceiveASN_Port”和“ReceiveInvoice_Port”这两个Port所“指向”(绑定)的webservices是如何生成的?我找到webservices的源代码,上面注释是是写着“This code was generated by a tool.   ....  Generated by "Microsoft.BizTalk.WebServices, Version=3.0.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"”是用什么工具生成呢? Any Idea?

    2008年10月30日 7:26
  • tutorial3中的异步方式就是Secle说的方式,“ReceiveASN_Port”和“ReceiveInvoice_Port”这两个Port其实是这个orchestration对外发布的web services。
     
    文档里注释是是写着“This code was generated by a tool. “,其实在tutorail中的每一操作步骤显示是用发布web services向导做的。
     
    “tutorial3中应该使用发布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,这一步是不必要的一步。这一点文档上没有说明这一点,很容易产生误导。”

    2008年10月31日 15:41