0

我有一个关于 WCF 的问题。

我创建了一个带有 MSMQ 端点的 WCF 服务。此服务由 Windows 服务公开,该服务由 Asp.net 应用程序使用。我的 Asp.net 应用程序使用一个外部 DLL,其中包含我想在 DataContract 中使用的类和枚举(由 eBay 定义)。我不能修改这些类,也不能添加属性。

我的 DataContract 类是这样的:

[DataContract]
public class AddItemArgs
{
    [DataMember]
    public ItemType Item { get; set; }
}

这个 ItemType 是在外部 DLL 中定义的类。

服务是由客户端创建和编译并正确调用的,但是......在序列化使用 DLL 中定义的类之一的参数时出现错误。错误是这样的:

System.Runtime.Serialization.SerializationException:键入“System.DelegateSerializationHolder+DelegateEntry”,数据合同名称为“eBay.Service.Core.Soap.BuyerPaymentMethodCodeType:BuyerPaymentMethodCodeType:http: //schemas.datacontract.org/2004/07/eBay.Service .Core.Soap ' 不是预期的。将任何静态未知的类型添加到已知类型列表中 - 例如,通过使用 KnownTypeAttribute 属性或将它们添加到传递给 DataContractSerializer 的已知类型列表中。

当我传递该参数(BuyerPaymentMethodCodeType)时,此问题已得到验证。这是因为 BuyerPaymentMethodCodeType 是枚举类型吗?如果我没有通过该字段传递 ItemType,一切都会好起来的。

4

1 回答 1

2

你有没有尝试过:

[DataContract]
[KnownType(typeof(BuyerPaymentMethodCodeType))]
public class AddItemArgs
{

}

就枚举而言,这里还有一些关于使用EnumMemberAttribute的指导

于 2009-09-08T15:19:20.057 回答