让人误解的WF(In/Out)参数

  前几天用WWF搞了一个小的流程控制程序,其中使用到Messaging Activity,因为是直接用Code来实现的WF逻辑,在处理ReceiveActivity和SendActivity时,将参数给使用反了,特记录下:

  Messaging Activity中包含有两种类别:Send类(Send,SendReply)和Receive类(Receive,ReceiveReply)。

  在WF中,与Activity的参数交互都是使用InArgument,OutArgument或InOutArgument。

  乍一看,Send/SendReply是用于消息的发送,应该使用的是OutArgument(将消息Out出去),但事实上,恰恰相反,此Out非彼Out,它使用的是InArgument,因为数据要传入活动,之后发送消息。类似的,Receive/ReceiveReply Activity使用的就是OutArgument了,数据要传出活动,用于接收消息。

  MSDN官方说法:In 参数用于发送活动,因为数据将传入活动。Out 参数用于接收活动,因为数据将传出活动。

  Example:  

Receive reserveSeat = new Receive
{ 
    ... 
    Content = new ReceiveParametersContent
    {
        Parameters =
        {
            { "ReservationInfo", new OutArgument<ReservationRequest>(reservationInfo) }
        }
    }
};
SendReply reserveSeat = new SendReply
{ 
    ... 
    Request = reserveSeat,
    Content = new SendParametersContent
    {
        Parameters =
        {
            { "ReservationId", new InArgument<string>(reservationId) }
        }
    },
};

   白话表述就是:In 参数将数据传入Send/SendReply活动,处理之后发送;Out 参数是Receive/ReceiveReply活动处理逻辑后将数据传出时使用的。

  权且记之……

posted @ 2012-05-20 15:41  多多晖  阅读(768)  评论(0)    收藏  举报