0

我正在向包含 Windows 工作流定义的 WCF 服务发送一个对象,但在尝试反序列化我的自定义活动时,反序列化程序出错。

当我以以下形式定义活动的命名空间时,这以前是有效的:

xmlns:tta="clr-namespace:MyNamespace;assembly=MyAssembly"

但出于可维护性的原因,我现在使用程序集属性将我的活动命名空间映射到 XAML 命名空间:

[assembly: XmlnsPrefix("http://schemas.product.com/activities/", "tta")]
[assembly: XmlnsDefinition("http://schemas.product.com/activities/", "MyNamespace")]

因此我的 xaml 命名空间看起来像:xmlns:tta="http://schemas.thacktech.com/activities/" 我的活动声明为:<tta:Naptime />

由于这一变化,我现在收到NetDispatcherFaultException的内容如下:

格式化程序在尝试反序列化消息时抛出异常:尝试反序列化参数http://tempuri.org/:job时出错。InnerException 消息是“元素” http://schemas.datacontract.org/2004/07/System.Activities:Activity包含来自映射到名称“Naptime, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null:MyNamespace.Naptime'。反序列化器不知道映射到此名称的任何类型。考虑更改 DataContractResolver 上 ResolveName 方法的实现,以返回名称“MyNamespace.Naptime”和命名空间“Naptime, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null'.'的非空值。有关更多详细信息,请参阅 InnerException。

问题

  1. 为什么解串器在使用 clr-namespace 语法时类型解析成功,但在使用 url-style 语法进行命名空间声明时失败?

  2. 看起来类型解析器完全误解了类型,将类名列为命名空间。为什么会这样做?

  3. 我该如何正确实施呢?

谢谢!

4

0 回答 0