0

我有一个 WF 服务,我正在尝试将接收活动设置为“订阅”和“取消订阅”。我使用This WF Durable Duplex Tutorial作为基础,因为我的服务执行对客户端的回调。基本上,将其视为聊天服务。

我可以很好地拨打两个接收活动的客户电话。发生的情况是客户端的回调地址被传递给服务上的 Subscribe()。该地址作为变量存储在 WF 服务中,一切看起来都像预期的那样工作。

当客户端调用 Unsubscribe() 时,我在调试期间在地址 var 上设置的手表显示为null. 那么给了什么?

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

一切都包含在 DoWhile 活动中。里面是一个 Pick 活动和两个 Pick 分支。第一个分支用于订阅活动。它有一个接收-发送-应答活动,将客户端传递的字符串分配给 WF 地址变量。第二个分支处理取消订阅。触发器是 Request 活动,再次传入客户端地址。

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

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

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

4

3 回答 3

1

在没有看到工作流程的情况下,我只能做出一些猜测,但我会寻找的是:

  1. 变量的范围是序列还是 DoWhile 活动内部的东西?顺便说一句,将其更改为 While 活动没有任何好处,唯一的区别是条件是在开始或结束时测试的。
  2. 变量是否在其他地方使用并以这种方式清除。尝试重命名它,看看有什么好处。
  3. 是否存在持久性,并且类型不持久>我认为它要么是字符串,要么是 Uri,两者都应该很好。
  4. 相关性是否存在问题,您的取消订阅消息是否正在由不同的工作流程处理?确定 CanCreateInstance 设置为 false。
于 2010-06-17T19:30:29.443 回答
0

尝试将类范围设为私有 {get; set;} 并查看问题是否仍然出现,这是我能做的最好的事情,而无需看到您所描述的实际源代码,我看不到任何问题。

于 2010-06-17T18:53:15.163 回答
0

哇,好可怕的东西。我不得不早先手动编辑 xamlx 文件,当我切换回活动设计器时,我为 SendReplyToReceive 编辑的引用保存得很有趣。它让我看起来好像有两个Unsubscribe()',不仅如此,每个分支的相关句柄也在分支之间交叉。

我现在都准备好了。为了解决这个问题,我删除了所有消息传递活动,将一个新ReceiveAndSendReply活动放入分支 1 的操作块中。然后,我将 Receive 活动拖到分支 1 的触发器并像以前一样配置它。我对分支 2 做了同样的事情,除了我将 SendReplyToReceive 活动放在验证匹配地址的 If 活动下方。

于 2010-06-17T19:26:45.483 回答