WF4 RC - 使用 ActivityXamlServices 从松散 Xaml 加载 WF 服务时无法创建未知类型

2023-11-27

我正在尝试动态托管 WF4 (RC) 服务。我有一个包含两个项目的测试解决方案。第一个是声明性工作流服务库,其中包含一个根 Flowchart 活动和一个简单的自定义代码活动。工作流服务库不依赖于任何其他自定义程序集或引用。第二个是我的主机应用程序,在我的测试解决方案中它只是一个控制台应用程序。

在我的主机应用程序中,我尝试使用 ActivityXamlServices 将工作流服务的 Xaml 加载到活动中,然后使用 WorkflowServiceHost 使用该活动启动工作流实例。

当我尝试新建 WorkflowServiceHost 对象时,我收到此异常......

无法创建未知类型 '{clr-namespace:DeclarativeServiceLibrary1}CodeActivity1'。

如果我从流程图设计器中删除 CodeActivity1,一切都会正常运行。如果我从宿主项目添加对工作流服务项目的直接引用,然后使用 Flowchart 活动的实例而不是从 Xaml 创建的活动创建 WorkflowServiceHost,它也可以正常工作。

由于某种原因,动态加载时似乎不喜欢使用我的 CodeActivity。

有人知道为什么我无法动态创建工作流程服务吗?

我的代码如下...

DeclarativeServiceLibrary1.Activity1.xaml...

<Activity mc:Ignorable="sap" x:Class="DeclarativeServiceLibrary1.Activity1" sap:VirtualizedContainerService.HintSize="654,676" mva:VisualBasic.Settings="Assembly references and imported namespaces for internal implementation" xmlns="http://schemas.microsoft.com/netfx/2009/xaml/activities" xmlns:av="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:local="clr-namespace:DeclarativeServiceLibrary1" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:mv="clr-namespace:Microsoft.VisualBasic;assembly=System" xmlns:mva="clr-namespace:Microsoft.VisualBasic.Activities;assembly=System.Activities" xmlns:p="http://schemas.microsoft.com/netfx/2009/xaml/servicemodel" xmlns:s="clr-namespace:System;assembly=mscorlib" xmlns:s1="clr-namespace:System;assembly=System" xmlns:s2="clr-namespace:System;assembly=System.Xml" xmlns:s3="clr-namespace:System;assembly=System.Core" xmlns:sad="clr-namespace:System.Activities.Debugger;assembly=System.Activities" xmlns:sap="http://schemas.microsoft.com/netfx/2009/xaml/activities/presentation" xmlns:scg="clr-namespace:System.Collections.Generic;assembly=System" xmlns:scg1="clr-namespace:System.Collections.Generic;assembly=System.ServiceModel" xmlns:scg2="clr-namespace:System.Collections.Generic;assembly=System.Core" xmlns:scg3="clr-namespace:System.Collections.Generic;assembly=mscorlib" xmlns:sd="clr-namespace:System.Data;assembly=System.Data" xmlns:sl="clr-namespace:System.Linq;assembly=System.Core" xmlns:st="clr-namespace:System.Text;assembly=mscorlib" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
  <Flowchart sad:XamlDebuggerXmlReader.FileName="C:\dev\test\MyWorkflow\DeclarativeServiceLibrary1\Activity1.xaml" sap:VirtualizedContainerService.HintSize="614,636">
    <sap:WorkflowViewStateService.ViewState>
      <scg3:Dictionary x:TypeArguments="x:String, x:Object">
        <x:Boolean x:Key="IsExpanded">False</x:Boolean>
        <av:Point x:Key="ShapeLocation">270,2.5</av:Point>
        <av:Size x:Key="ShapeSize">60,75</av:Size>
        <av:PointCollection x:Key="ConnectorLocation">300,77.5 300,107.5 300,165</av:PointCollection>
      </scg3:Dictionary>
    </sap:WorkflowViewStateService.ViewState>
    <Flowchart.StartNode>
      <FlowStep x:Name="__ReferenceID0">
        <sap:WorkflowViewStateService.ViewState>
          <scg3:Dictionary x:TypeArguments="x:String, x:Object">
            <av:Point x:Key="ShapeLocation">172.5,165</av:Point>
            <av:Size x:Key="ShapeSize">255,90</av:Size>
            <av:PointCollection x:Key="ConnectorLocation">300,255 300,285 300,299.5</av:PointCollection>
          </scg3:Dictionary>
        </sap:WorkflowViewStateService.ViewState>
        <p:Receive CanCreateInstance="True" sap:VirtualizedContainerService.HintSize="255,90" OperationName="MyOperation" ServiceContractName="MyContractName" />
        <FlowStep.Next>
          <FlowStep x:Name="__ReferenceID1">
            <sap:WorkflowViewStateService.ViewState>
              <scg3:Dictionary x:TypeArguments="x:String, x:Object">
                <av:Point x:Key="ShapeLocation">194.5,299.5</av:Point>
                <av:Size x:Key="ShapeSize">211,61</av:Size>
                <av:PointCollection x:Key="ConnectorLocation">300,360.5 300,390.5 300,399</av:PointCollection>
              </scg3:Dictionary>
            </sap:WorkflowViewStateService.ViewState>
            <WriteLine sap:VirtualizedContainerService.HintSize="211,61" Text="Workflow started" />
            <FlowStep.Next>
              <FlowStep x:Name="__ReferenceID3">
                <sap:WorkflowViewStateService.ViewState>
                  <scg3:Dictionary x:TypeArguments="x:String, x:Object">
                    <av:Point x:Key="ShapeLocation">200,399</av:Point>
                    <av:Size x:Key="ShapeSize">200,22</av:Size>
                    <av:PointCollection x:Key="ConnectorLocation">300,421 300,451 300,479.5</av:PointCollection>
                  </scg3:Dictionary>
                </sap:WorkflowViewStateService.ViewState>
                <local:CodeActivity1 sap:VirtualizedContainerService.HintSize="200,22" />
                <FlowStep.Next>
                  <FlowStep x:Name="__ReferenceID2">
                    <sap:WorkflowViewStateService.ViewState>
                      <scg3:Dictionary x:TypeArguments="x:String, x:Object">
                        <av:Point x:Key="ShapeLocation">194.5,479.5</av:Point>
                        <av:Size x:Key="ShapeSize">211,61</av:Size>
                      </scg3:Dictionary>
                    </sap:WorkflowViewStateService.ViewState>
                    <WriteLine sap:VirtualizedContainerService.HintSize="211,61" Text="The code activity worked!" />
                  </FlowStep>
                </FlowStep.Next>
              </FlowStep>
            </FlowStep.Next>
          </FlowStep>
        </FlowStep.Next>
      </FlowStep>
    </Flowchart.StartNode>
    <x:Reference>__ReferenceID0</x:Reference>
    <x:Reference>__ReferenceID1</x:Reference>
    <x:Reference>__ReferenceID2</x:Reference>
    <x:Reference>__ReferenceID3</x:Reference>
  </Flowchart>
</Activity>

DeclarativeServiceLibrary1.CodeActivity1.cs ...

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Activities;

namespace DeclarativeServiceLibrary1
{

    public sealed class CodeActivity1 : CodeActivity
    {
        // Define an activity input argument of type string
        //public InArgument<string> Text { get; set; }

        // If your activity returns a value, derive from CodeActivity<TResult>
        // and return the value from the Execute method.
        protected override void Execute(CodeActivityContext context)
        {
            // Obtain the runtime value of the Text input argument
            //string text = context.GetValue(this.Text);
        }
    }
}

DeclarativeServiceLibrary1.Web.Config ...

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <system.web>
    <compilation debug="true" targetFramework="4.0" />
  </system.web>
  <system.serviceModel>
    <behaviors>
      <serviceBehaviors>
        <behavior>
          <!-- To avoid disclosing metadata information, set the value below to false and remove the metadata endpoint above before deployment -->
          <serviceMetadata httpGetEnabled="true"/>
          <!-- To receive exception details in faults for debugging purposes, set the value below to true.  Set to false before deployment to avoid disclosing exception information -->
          <serviceDebug includeExceptionDetailInFaults="false"/>
        </behavior>
      </serviceBehaviors>
    </behaviors>
    <serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
  </system.serviceModel>
  <system.webServer>
    <modules runAllManagedModulesForAllRequests="true"/>
  </system.webServer>
</configuration>

ConsoleApplication1.Program.cs ...

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Activities;
using System.Activities.XamlIntegration;
using System.ServiceModel;
using System.ServiceModel.Activities;
using System.ServiceModel.Description;
using System.Xaml;
using System.Reflection;
using System.IO;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {            
            string baseAddress = @"http://localhost:8081/MyContractName";

            string curDir = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
            string wfDefPath =  Path.Combine(curDir, "Activity1.xaml");

            Activity workflowActivity = (Activity)ActivityXamlServices.Load(wfDefPath); 
            WorkflowService service = new WorkflowService { Body = workflowActivity }; 
            Uri serviceUri = new Uri(baseAddress, UriKind.Absolute); 
            WorkflowServiceHost host = new WorkflowServiceHost(service, new Uri[] { serviceUri }); 
            host.Open();

            //Display that we are listening on the console window
            Console.WriteLine("Workflow '{0}' is listening at '{1}'", host.Activity.DisplayName, baseAddress);
            Console.ReadLine();
        }
    }
}

我在声明式工作流服务库中有一个构建后事件,该事件将程序集和 Xaml 文件复制到主机控制台应用程序的 bin\debug\ 文件夹中。


简短的回答 - Xaml 加载无法推断本地(默认)程序集,因此您需要在 XamlReaderSettings.LocalAssembly 上指定它。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

WF4 RC - 使用 ActivityXamlServices 从松散 Xaml 加载 WF 服务时无法创建未知类型 的相关文章

随机推荐

  • Chef Chef-validator.pem 安全性

    您好 我正在异地使用厨师设置一组机器 如果其中一台机器被盗 攻击者可以通过拥有chef validator pem 对我的chef server 或其他节点造成什么损害 他们还可以通过厨师获得哪些其他东西 谢谢 这是最近 Foodfight
  • Google 云端硬盘 - 无法通过经过身份验证的 (OAuth2) 请求下载缩略图

    对于所有 Google 文档 我无法从随文件响应返回的 ThumbnailLink 属性下载缩略图 我总是收到 403 禁止 错误页面 其中包含类似于以下内容的消息 您的客户端没有权限获取 URL 缩略图链接从该服务器 客户端IP地址 cl
  • 如何根据CASE执行不同的SELECT语句

    我在使用 CASE 语句执行查询时遇到问题 根据我的条件 例如长度 我想执行不同的 SQL 语句 有问题的示例查询如下 select case when char length 19480821 8 then select count 1
  • Zend Framework TDG 与 Doctrine [重复]

    这个问题在这里已经有答案了 可能的重复 什么时候应该使用 ORM 主义 什么时候应该使用 zend db table 简而言之 什么更好 为什么 我目前使用 Zend Framework TDG 但正在考虑转向 Doctrine 已经从 Z
  • 具有显式域的本地主机上的 Cookie

    我一定是错过了一些关于 cookie 的基本知识 在本地主机上 当我在服务器端设置 cookie 时and将域显式指定为 localhost 或 localhost 某些浏览器似乎不接受cookie 火狐 3 5 我在 Firebug 中检
  • 适用于 Windows 的最佳轻量级 Web 服务器(仅静态内容)[关闭]

    Closed 这个问题是无关 目前不接受答案 我在 Windows 中运行应用程序服务器 IIS6 0 并使用 Zend Server 来执行 PHP 我正在同一台计算机上寻找轻量级仅静态内容的 Web 服务器 它将重温 IIS 表单处理静
  • “类型错误:‘函数’对象不支持项目分配”

    我有两个矩阵 fi f1 Nij N11 N12 N1n f2 N21 N22 N2n fn Nn1 Nn2 Nnn 我想乘以 f1 to each element of the 1st row f2 to each element of
  • ListView光标变化和闪烁

    当光标出现在某个项目上时 我试图更改标准 ListView 上出现的光标 然而 当鼠标变为手指光标 然后又回到我要求的状态时 我得到了闪烁的效果 我试图将这种闪烁 更改隔离到手形光标 但无法弄清楚它发生在哪里或如何阻止它 为了复制这个 1
  • 如何启用 WCF 日志记录以便将其写入数据库?

    我希望能够在数据库中记录消息信息 并且我正在尝试决定如何最好地做到这一点 是否可以将 WCF 日志记录机制配置为写入数据库而不是文件 谢谢 你需要有两件事 启用 NET 跟踪的正确配置 跟踪侦听器 用于捕获跟踪消息并将其存储在数据库中 Fo
  • 实体框架 6 提供开箱即用的存储库和 UoW

    但如何使用它呢 我有一个Code First项目建立 并尝试使用这个新的 EF6 进行一些操作 阅读至少 2 岁有关 EF4 5 的各种帖子 博客 但对于 EF6 却一无所知 假设我有这些实体 public DbSet
  • 基于注释的验证框架[关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心以获得指导 我正在寻找一个基于注释的验
  • PHP HTML 创建库 [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心以获得指导 我正在寻找一个 PHP 解
  • 这里的递归是如何工作的?

    Code 1 public static int fibonacci int n if n 0 n 1 return 1 else return fibonacci n 1 fibonacci n 2 你如何使用fibonacci如果你还没
  • 如何在 OS X 上安装 Hudson 作为服务?

    Running hudson这很简单 但目前文档缺少在 OS X 上安装正在运行的 hudson 作为守护进程 服务的教程 当您切换到生产时 您需要确保其配置正确并受到保护 要求 能够在端口 80 上运行它 不以 root 身份运行 或者至
  • android.net 与 java.net 以及不同的 URI 类

    我正在编写一个带有模型对象的应用程序 该对象将向某些 Web 服务公开 Restful 接口 我注意到 Android 中有一个 java net URI 和一个 android net URI 类 使用其中一种与另一种相比有什么好处 有没
  • 在 django 过滤器中使用 dateadd

    我有一个按开始日期和持续时间 以天为单位 定义订阅期的模型 class SubscriptionProduct models Model start date models DateField duration models Integer
  • 可以包装或合并单独的名称空间吗?

    我似乎记得在某处看到过关于将多个命名空间合并为一个的方法的注释 现在 在寻找所说的笔记时 我找不到它们 即使使用搜索词组合 分组 合并和包装进行搜索 我也没有找到任何结果 也许我误解了我之前所看到的 我对此没有具体的应用程序 这只是出于好奇
  • Blazor 监听 javascript 事件

    我有一个名为 Hello 的 JavaScript 事件 addEventListener hello function alert event listener 并且 在另一个 javascript 函数中 我引发了该事件 let eve
  • 使用 MongoTemplate 进行 Spring Boot

    我是 Spring Boot 和 MongoDb 的新手 尝试使用 Mongo 存储库和 Spring Boot 的一些示例 但在浏览了一些文档后发现 Mongo Template 将是一个更好的选择 无法使用 Mongo 模板示例获取正确
  • WF4 RC - 使用 ActivityXamlServices 从松散 Xaml 加载 WF 服务时无法创建未知类型

    我正在尝试动态托管 WF4 RC 服务 我有一个包含两个项目的测试解决方案 第一个是声明性工作流服务库 其中包含一个根 Flowchart 活动和一个简单的自定义代码活动 工作流服务库不依赖于任何其他自定义程序集或引用 第二个是我的主机应用