0

WCFについて質問です。

MSMQ エンドポイントを使用して WCF サービスを作成しました。このサービスは Windows サービスによって公開され、サービスは Asp.net アプリケーションによって消費されます。私の Asp.net アプリケーションは、DataContract で使用したい (eBay によって定義された) クラスと列挙型を含む外部 DLL を使用します。これらのクラスを変更することも、属性を追加することもできません。

私の DataContract クラスは次のようになります。

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

この ItemType は、外部 DLL で定義されたクラスです。

サービスは作成およびコンパイルされ、クライアントによって正しく呼び出されますが、DLL で定義されたクラスの 1 つを使用するパラメーターをシリアル化中にエラーが発生します。エラーは次のようになります。

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 に答える