gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 05:05:29 25 4
gpt4 key购买 nike

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

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

一旦我尝试更新WorkflowServiceHost对象,就会收到此异常...

Cannot create unknown type '{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();
}
}
}

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

最佳答案

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

关于xaml - WF4 RC-使用ActivityXamlServices从松散的Xaml加载WF服务时,无法创建未知类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2330762/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com