J'essaie d'organiser de manière dynamique un service WF4 (RC). J'ai une solution de test avec deux projets. La première est une bibliothèque de services de flux de travail déclarative avec une activité d'organigramme racine et une simple activité de code personnalisé. La bibliothèque de services de flux de travail ne dépend pas d'autres assemblages ou références personnalisées. La seconde est mon application hôte, laquelle dans ma solution de test n'est qu'une application console.
Dans mon application hôte, je tente d'utiliser l'activitéXAMLServices pour charger le XAML pour le service de flux de travail dans une activité, puis utilisez le WorkflowServiceHostHost Pour reposer une instance de flux de travail à l'aide de cette activité. P>
Dès que j'essaie de nouveau sur l'objet WorkflowserviceHost, je reçois cette exception ... P>
ne peut pas créer de type inconnu '{CLR-NAMPACE: DÉCLARIANSVICELIBRY1} CODÉACTIVITÉ1'. P> BlockQuote>
Si je supprime la CoDeActivity1 de My Filkt Designer, tout fonctionne bien. Si j'ajoute une référence directe au projet de service de flux de travail à partir de mon projet hôte, puis créez un WorkflowServiceHost à l'aide d'une instance de mon activité de Flackchart au lieu de l'activité créée à partir du XAML, cela fonctionne également bien. P>
Il semble que Pour ne pas aimer utiliser ma codactivité pour une raison quelconque lorsqu'il est chargé de manière dynamique. P>
Quelqu'un a des idées sur lesquelles je ne peux pas créer de manière dynamique mon service de flux de travail? p>
Mon code est comme suit. .. p>
déclaratifservy1.Activity1.xaml ... p>
xxx pré> déclaratifservy1.Codeactivity1.cs ... p>
xxx Pré> déclaratifservicelibrary1.web.config ... p>
xxx pré> consoleapplication1.program.cs ... p>
xxx pré> J'ai un événement post-construction dans la bibliothèque de services de flux de travail délabrée qui copie le fichier Assembly et XAML dans le dossier Bin \ Debug \ de l'application de console hôte. P> P>
4 Réponses :
Vous désérialisez directement le fichier XAML, mais il fait référence à un type (CoDeActivity1) compilé en tant que type CLR dans l'assemblage RECISIQUEVICHIBRY1. La réponse la plus évidente est que l'assemblage de la ConsoleVicelibrary1 n'est pas disponible pour l'application de la console au moment de l'exécution. Assurez-vous que cet assembly est copié dans le dossier où vous exécutez l'application de la console (\ bin \ debug) et voyez si cela fait la différence. P>
La dernière ligne est que même si vous lisez directement le fichier XAML, il a toujours besoin d'accéder à tous types de références. P>
L'assemblage de RECISIMERVICELIBRY1 est copié dans le dossier Bin \ Debug \ de l'application de la console. J'ai même essayé d'ajouter une référence directe à l'application de la console.
En regardant votre code, je peux dire que vous auriez dû charger un workflowservice au lieu d'une simple activité. Il y a essentiellement deux options pour essayer ici:
Option 1: chargez l'activité et l'hébergeur à l'intérieur d'un service de workflow généré. Strong> p> Vous pouvez le faire en chargeant l'activité en chargement de l'activité Normal et utilisez l'extrait de suivi pour en faire une instance de service de flux de travail: p> après cela, vous pouvez l'héberger dans l'hôte de service de flux de travail. P> < Strong> Option 2: Chargez le service de flux de travail directement strong> p> La deuxième option n'est pas très différente de ce que vous avez maintenant. Mais au lieu d'utiliser la classe ActivityXamLservices, vous devrez utiliser la classe XAMLServices pour charger le service de flux de travail. Après cela, il s'agit d'avoir tiré sur l'hôte de service de flux de travail avec les paramètres que vous avez utilisés dans votre échantillon. P> p>
L'option 1 fonctionne si j'instimise le Précendeur Servicelibrary1.activity1 directement et l'utiliser, mais cela ne vous a toujours pas préférable de charger le XAML à partir du disque. Je reçois mon erreur d'origine lorsque vous essayez de créer le WorkflowServiceHost. L'option 2 me donne une erreur indiquant "" Aucun constructeur de correspondance trouvé sur le type "System.Activités.Activités". Vous pouvez utiliser les arguments ou les directives FactoryMethod pour construire ce type. "" Dès que j'essaie de charger l'activité en utilisant l'activité en utilisant la méthode xamlservices.load. Faites-moi savoir si vous regardez mon code mis à jour et je l'affiche.
J'ai vérifié ma solution et je ne peux pas reproduire les erreurs que vous obtenez. J'ai essayé l'extrait de code suivant: Activité Workflowactivity = (activité) ActivityXamlservices.load ("Workflow1.xaml"); Workflowservice service = nouveau workflowservice {corps = workflowactivité}; Uri Serviceuri = New Uri (" localhost: 9001 / TestService", Urikind.absoluute ); WorkflowserviceHost hôte = nouveau WorkflowserviceHost (service, nouveau URI [] {Serviceuri}); hôte.open ();
Je suis intégré à votre code coupé et je ne peux toujours pas sembler l'avoir pour une raison quelconque. J'ai mis à jour le code dans le poteau ci-dessus. J'ai également téléchargé toute ma solution à dntest.criticaltech.com/myworkflow.zip . Vérifiez-le si vous avez une chance. Merci pour votre aide, BTW.
Après une évaluation minutieuse de la situation, je pense avoir trouvé le problème. Cette erreur semble se produire si vous construisez un flux de travail qui utilise une coquidation ou une natifactivité de la même assemblée. Laissez-moi vérifier de plus de choses et je vous recontacterai.
Réponse courte - La charge XAML ne peut pas en déduire l'assemblage local (par défaut), vous devez donc la spécifier sur XamLreadersettings.Localassemblage. P>
Merci, tim. Je passe à l'aide d'un xamlxmlreader à lire dans le fichier XAML à l'aide du fichier xamlxmlreadersettings.Localassembly tel que vous avez décrit. Faire cela et transmettre la xamlxmlreader dans la méthode ActivityXamLservices.load fonctionnant comme un charme.
Sinon, vous pouvez diviser les flux de travail XAML et les activités qu'ils utilisent. Lorsque vous faites cela, l'activité n'est plus dans l'espace de nom de CLR local et sera bien chargé. Donc, créer un projet XAML Workflow et un projet d'activité.
Code open source de l'activité. Changer "XMLNS: local =" Espace CLR-NAMPES: déclaratoireVicelibrary1 "à XMLNS: local = "Espace de noms CLR-NAMES: déclaratifServicelibrary1; Assembly = déclaratifServicelibrary1". P>
Cela a également corrigé un autre bug pour moi: Stackoverflow.com/Questtions/9743133/... Erreur: Erreur" '"Protérément inattendu" dans la règle d'analyse' Élément :: =. Employé (Startelement Element). '. "