2010-06-17 52 views
0

我有一个WF服务,我试图设置接收活动“订阅”和“取消订阅”。我使用This WF Durable Duplex Tutorial作为基础,因为我的服务为客户执行回调。基本上,把它想象成聊天服务。为什么我的工作流服务(4.0)变量在DoWhile活动中变为空?

我可以使客户端调用两个接收活动就好了。会发生什么事是客户的回调地址被传递给服务上的Subscribe()。该地址作为WF服务中的一个变量存储,并且一切看起来都像预期的那样工作。

当客户端调用Unsubscribe()时,我在调试过程中设置了地址var,表示它为null。那么是什么给了?

这里是我的WF服务布局的基本设置...

一切都在一个DoWhile活动笼罩。里面是Pick活动和两个Pick分支。第一个分支用于订阅活动。它有一个receive-sendreply活动,它将客户端传递的字符串分配给WF地址var。第二个分支处理退订。触发器是请求活动,客户端地址再次通过。

从那里进入一个序列,从一个If开始。它会检查unsubscribeAddress是否等于已订阅的address。如果是,则它将address设置为String.Empty,并将成功消息发送回客户端。

为什么会将包含DoWhile活动的变量隐式分配给null?我试图让这个工作,以便我可以从那里实现多个客户端订阅者,并处理触发器,它将调用回调给多个客户端。

CONCAT编辑:我在DoWhile级别设置了一个断点,一旦调用Unsubscribe(),我的var就为空。当调用Subscribe()时,手表在var中一直显示一个值。直到我Unsubscribe()与客户端。我应该使用While Activity吗?

回答

0

哇,好可怕的东西。当我切换回活动设计师时,我不得不手动编辑xamlx文件,并且为SendReplyToReceive编辑的参考文件保存得很有趣。它使我看起来像有两个Unsubscribe()'s,不仅如此,而且每个分支的关联句柄都在分支之间交叉。

我现在全部设置。要解决此问题,我删除了所有消息传递活动,并将新的ReceiveAndSendReply活动放入分支1的操作块中。然后,我将Receive活动拖到分支1的触发器上,并按照以前的方式进行配置。除了我将SendReplyToReceive活动放置在验证匹配地址的If活动下方之外,我对分支2也做了相同的处理。

0

尝试制作一个类作用域private {get;设置;},看看问题是否仍然存在,这是我所能做的最好的,但没有看到实际的源代码,从你所描述的我看不出任何问题。

+0

对不起Gnostus,这是一个.Net工作流服务,我不能做一个类,并将该变量定义为一个属性。如果这是代码,那么它将更容易处理,并且更容易调试。 – jlafay 2010-06-17 19:13:44

1

没有看到工作流程,我只能做一些猜测,但事情我会找有:

  1. 是变量作用域的顺序或东西是DoWhile活动的内部?顺便说一句,将它改为While活动没有任何好处,唯一的区别是条件在开始或结束时进行测试。
  2. 该变量是否在其他地方使用并以此方式清除。尝试重命名它,看看给出了什么。
  3. 是否存在游戏中的残留,并且类型没有持续>我认为它是一个字符串或一个Uri,两者都应该很好去。
  4. 相关性是否存在问题,并且您的Unsubscribe消息是否正在被不同的工作流处理?马雷肯定CanCreateInstance设置为false。
+0

是的,如果你看到我上面的答案,我确实发现了这个问题。设计师害怕我,因为在XAML和活动设计师之间切换使得代码变得非常棘手。我删除了消息传递活动并重新开始。由于相关性如此落后,而且ReplyToReceive被交换,地址字符串在战斗中丢失了。 顺便说一下,非常感谢您在WF服务中提供持久双面打印和回调方面的精彩博客文章!他们非常帮助我。 – jlafay 2010-06-17 20:23:50