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 を渡さなければ、すべてうまくいきます。