2010-06-17 16 views
0

J'ai un service WF que j'essaye de configurer recevoir des activités à "S'abonner" et "Se désabonner". J'utilise This WF Durable Duplex Tutorial comme base car mon service effectue des rappels aux clients. Fondamentalement, pensez-y comme un service de chat.Pourquoi ma variable Workflow Service (4.0) est-elle nulle dans une activité DoWhile?

Je peux très bien faire des appels clients aux deux activités de réception. Ce qui se passe, c'est que l'adresse de rappel du client est transmise à Subscribe() sur le service. L'adresse est stockée en tant que variable dans le service WF et tout semble fonctionner comme prévu.

Lorsqu'un client appelle Unsubscribe(), ma montre que j'ai définie sur l'adresse var pendant le débogage affiche null. Alors qu'est-ce qui donne?

est ici la configuration de base de ma mise en service WF ...

Tout est enveloppé dans une activité DoWhile. A l'intérieur de cela est une activité Pick et deux branches Pick. La première branche est pour les activités d'abonnement. Il a une activité receive-sendreply qui affecte la chaîne passée par le client à l'adresse WF var. La deuxième branche gère les désinscriptions. Le déclencheur est l'activité Requête et l'adresse du client est à nouveau transmise.

De là, il passe dans une séquence, en commençant par un If. Il vérifie si le unsubscribeAddress est égal au address déjà souscrit. Si c'est le cas, il définit address à String.Empty et renvoie un message de réussite au client.

Pourquoi une variable portée à l'activité DoWhile enveloppante est-elle implicitement affectée à null? J'essaye de faire fonctionner ceci afin que je puisse implémenter plusieurs abonnées de client à partir de là et travailler sur des déclencheurs qui appellent des rappels à plusieurs clients.

CONCAT EDIT: Je définis un point d'arrêt au niveau DoWhile et ma var est nulle une fois que Unsubscribe() est appelée. Lorsque Subscribe() est invoqué, la montre affiche une valeur dans la variable jusqu'au bout. Jusqu'à ce que je Unsubscribe() avec un client. Dois-je utiliser une activité While à la place?

Répondre

0

Wow, ok choses effrayantes. J'ai dû modifier à la main le fichier xamlx plus tôt et les références que j'ai éditées pour le SendReplyToReceive sauvé quand je suis revenu au concepteur d'activité. Cela donnait l'impression que j'avais deux Unsubscribe() et pas seulement cela, mais les poignées de corrélation pour chaque branche se croisaient entre les branches.

Tout est prêt maintenant. Pour résoudre le problème, j'ai supprimé toutes les activités de messagerie, puis ajouté une nouvelle activité ReceiveAndSendReply dans le bloc d'action de la branche 1. Puis j'ai traîné l'activité de réception au déclencheur pour la branche 1 et l'ai configurée comme avant. J'ai fait la même chose pour la branche 2, sauf que j'ai placé l'activité SendReplyToReceive sous mon activité If qui valide les adresses correspondantes.

0

Essayez de créer une classe étendue privée {get; ensemble;} et voir si le problème fait toujours sa tête, c'est le mieux que je puisse faire sans voir le code source réel à partir de ce que vous avez décrit, je ne vois pas les problèmes.

+0

Désolé Gnostus, il s'agit d'un service de flux de travail .Net et je ne peux pas créer de classe et définir la variable comme une propriété. Si c'était du code, il serait plus facile d'attaquer et infiniment plus facile à déboguer. – jlafay

1

Sans voir le flux de travail je ne peux que faire quelques suppositions, mais les choses que je chercherais sont:

  1. est la variable SCOPED à une séquence ou quelque chose qui est à l'intérieur de l'activité DoWhile? BTW Il n'y a aucun avantage à le changer pour une activité While, la seule différence est que la condition est testée au début ou à la fin.
  2. La variable est-elle utilisée ailleurs et effacée de cette manière? Essayez de le renommer et voir ce que donne.
  3. Y a-t-il de la persévérance dans le jeu et le type n'est pas persistant?> Je suppose que c'est une chaîne ou un Uri et que les deux devraient être bons à faire.
  4. Y a-t-il un problème de corrélation et votre message de désinscription est-il traité par un flux de travail différent? Assurez-vous que CanCreateInstance est défini sur false.
+0

Oui, si vous voyez ma réponse ci-dessus, j'ai découvert le problème. Le designer m'effraie parce que passer du XAML au concepteur d'activités rendait les choses très difficiles dans le code. J'ai supprimé les activités de messagerie et recommencé. Parce que la corrélation était tellement en arrière et que ReplyToReceive a été permuté, la chaîne d'adresse a été perdue dans la mêlée. En passant, merci beaucoup pour vos merveilleux articles de blog sur les duplex et rappels durables dans les services WF! Ils m'ont énormément aidé. – jlafay