导航

Orchestration中使用WCF Adapter集成ASXM模型的Web Service

Posted on 2008-01-08 17:36  鸡尾虾的壳  阅读(4260)  评论(2编辑  收藏  举报
WCF兼容MS先前推出的各种Web Service模型,如ASXM Web Service, WSE2.0, WSE3.0。其中,WCF_BasicHttp这种绑定方式是专门为集成旧有的ASXM Web Service而设计的。

Orchestration的开发过程是wsdl驱动的。主要步骤包括:Add-->Add Generated Items-->Consume WCF Service. 设定wsdl address后,next, next.

VS会生成一个Multi_Part Message类型的xsd, In xsd, Out xsd, SoapHeader xsd(如果wsdl包含), Request-Response类型的Port Type, 一个空的odx文件。

在Port Panel上,新建一个wsdl导出类型的Port,方向是Send a request and receive response,它属于Solicit_Response类型的Send Port. 包含一个Send Pipeline与一个Receive Pipeline. 在运行期,先执行SendPipeline(Request Msg), 接着调用物理存在的Web Service, 最后执行ReceivePipeline,把Response Msg返回给Orchestration。

SoapHeader的处理:Port并不直接接受这部分消息,它需要作为属性值附着在Request消息上。具体如下:
    Msg_WSDTO(WCF.OutboundCustomHeaders)="<headers>"+......+"</headers>";
这与SOAP Adapter中通过Property Schema的处理方式是不同的。


如果使用Dynamic Port,需要设置的属性如下(消息构造形状中):
    Msg_WSDTO(WCF.BindingType)="basicHttpBinding";
    Msg_WSDTO(WCF.MessageEncoding)="Mtom";
    Msg_WSDTO(WCF.Action)=http://www.oocllogistics.com/ws/CommonCall;

设置物理Port的URI:
      GenericWSPort(Microsoft.XLANGs.BaseTypes.Address)="http://liangda/TestWebService01/Service.asmx";
      GenericWSPort(Microsoft.XLANGs.BaseTypes.TransportType)="WCF_BasicHttp";
Address属性设置语句必须放在第一条,否则编译出错,提示Dynamic Port没有被初始化。


把整个Orchestration发布为Web Service或者WCF时,可以定制namespace以及SoapHeader。