gpt4 book ai didi

c# - 此类型分配错误是 WCF 或 Windows Workflow Foundation 4.5 中的错误吗?

转载 作者:行者123 更新时间:2023-11-30 15:30:40 25 4
gpt4 key购买 nike

我有一个 Windows Workflow Foundation 4.5 WCF 工作流服务应用程序。我正在尝试返回 Dictionary<IEdmEntityType, DataTable>来 self 的 CodeActivity<Dictionary<IEdmEntityType, DataTable>> .代码没有遇到编译时错误,但 XAML 无法编译。

我的 XAML 的相关部分是这样的:

我们有序列的变量声明,我试图在其中转储我的返回值。我们试图分配给的变量称为 EntityTableRelationships .

<p1:Sequence.Variables>
<p1:Variable x:TypeArguments="x:String" Name="MetadataContent" />
<p1:Variable x:TypeArguments="scg:Dictionary(mde:IEdmEntityType, sd:DataTable)" Name="EntityTableRelationships" />
</p1:Sequence.Variables>

还有 OutArgument ,来自 Execute 的返回值, 来 self 们的 CodeActivity<..>被分配给 EntityTableRelationships .

<o:TransformMetadataToTables.Result>
<p1:OutArgument x:TypeArguments="scg:Dictionary(mde:IEdmEntityType, sd:DataTable)">
<mca:CSharpReference x:TypeArguments="scg:Dictionary(mde:IEdmEntityType, sd:DataTable)">EntityTableRelationships</mca:CSharpReference>
</p1:OutArgument>
</o:TransformMetadataToTables.Result>

产生的 XAML 验证错误是:

Type 'http://schemas.microsoft.com/netfx/2009/xaml/activities:OutArgument(Dictionary)' is not assignable to type 'http://schemas.microsoft.com/netfx/2009/xaml/activities:OutArgument(Dictionary)' of member 'EntityTableRelationships'.

This is what I see in the designer

最初我以为我输入了错误的返回值,或者我引用了一个具有相同名称但在不同命名空间中的接口(interface)。事实并非如此。

我的另一个想法是,工作流可能无法与任何 Dictionary<TKey, TValue> 配合使用声明TKey作为任何界面。我做了一个测试用例,它运行良好。我还在设计器中按顺序添加了该步骤,就像这里所做的那样。我没有尝试 IEdmEntityType作为 TKey ,但我看不出有什么不同的原因。

这可能是什么原因造成的,我该如何解决?

编辑#1

进一步的研究表明 DataTable是罪魁祸首。 DataSet也有问题。我唯一能看出这些类型的独特之处在于它们继承自 MarshalByValueComponent它有一个 TypeConverterAttribute在上面。那TypeConverter可能会影响 XAML 序列化联编程序并导致问题,从而表明 WF 4.5 中存在错误。但是,我不愿意说这是一个错误。

没有Dictionary<TKey, DataTable>似乎可以通过设计器在 WF 4.5 中传递。

编辑#2

它似乎与DataTable 可能有也可能没有任何关系。 .你也不能绕过Dictionary<IEdmEntityType, object> .

尝试使用 System.Data 之外的类重现问题和System.Object以外的, 我做了一个新的工作流项目。

我创建了自己的接口(interface)、类和结构,看看是否有任何东西会触发它再次中断。

而不是使用 IEdmEntityType ,我做了IMyInterface这只是定义为:

public interface IMyInterface
{
int Id
{
get;
}
}

MyStruct结构工作正常。这是定义:

public struct MyStruct
{
public int A;
public int B;
}

MyClass上课效果很好。这是定义:

public class MyClass
{
public int A;
public int B;
}

MyClassComplex具有自动属性和对 object 的引用也有效。

public class MyClassComplex
{
public int A
{
get;
private set;
}

public int B
{
get;
private set;
}

public object C
{
get;
private set;
}
}

本来我也觉得可能和DataTable之间的公共(public)属性有关和 DataSet ,所以我将它们添加到 MyClassComplex , 但它仍然运行良好。

另外,我有 MyClassComplex继承自 MarshalByValueComponent ,并且没有奇怪的交互,再次没有错误。

我采用了同一个项目,只是将我的变量设置为 Dictionary<IMyInterface, DataTable>并更改了 CodeActivity<IMyInterface, MyClassComplex>CodeActivity<IMyInterface, DataTable> ,它给出了与我原来的非测试项目相同的错误。

编辑 #3

由于我已经对此进行了测试并在单独的项目和同事的机器上重现了该问题,并且没有文档支持为什么这不起作用,所以我提交了 bug report on MS Connect

最佳答案

显然,Windows Workflow Foundation 包含特定版本的 Microsoft.Data.OData,将 ODataLib NuGet 包添加到项目会与之冲突。我四处搜索了最初包含引用的位置,结果发现它是在代码生成期间作为工作流设计者的代码生成过程的一部分默默添加的。

在客户端没有任何错误表明某些程序集版本冲突。据我所知,没有办法解决这个问题。 Microsoft 已“按设计”关闭了票证。

关于c# - 此类型分配错误是 WCF 或 Windows Workflow Foundation 4.5 中的错误吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21712104/

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