SQLServer セッション変数にシリアル化し、WCF サービスで使用できるようにする必要があるクラスがあります。以下のように宣言しました
namespace MyNM
{
[Serializable]
[DataContract(Name = "Foo", Namespace = "http://www.mydomain.co.uk")]
public class Foo : IEntity, ISafeCopy<Foo>
{
[DataMember(Order = 0)]
public virtual Guid Id { get; set; }
[DataMember(Order = 1)]
public virtual string a { get; set; }
DataMember(Order = 2)]
public virtual Bar c { get; set; }
/* ISafeCopy implementation */
}
[Serializable]
[DataContract(Name = "Bar ", Namespace = "http://www.mydomain.co.uk")]
public class Bar : IEntity, ISafeCopy<Bar>
{
#region Implementation of IEntity
DataMember(Order = 0)]
public virtual Guid Id { get; set; }
[DataMember(Order = 1)]
public virtual Baz y { get; set; }
#endregion
/* ISafeCopy implementation*/
}
[Serializable]
[DataContract]
public enum Baz
{
[EnumMember(Value = "one")]
one,
[EnumMember(Value = "two")]
two,
[EnumMember(Value = "three")]
three
}
しかし、このサービスを呼び出そうとすると、トレース ログに次のエラーが表示されます。
「System.Runtime.Serialization.InvalidDataContractException: タイプ 'BarProxybcb100e8617f40ceaa832fe4bb94533c' は ISerializable にすることはできず、DataContractAttribute 属性を持つことはできません。」
Serializable 属性を取り出すと、WCF サービスは機能しますが、オブジェクトをセッションにシリアル化できない場合。クラス Bar から DataContract 属性を削除すると、WCF サービスが失敗し、
データ コントラクト名が「BarProxy3bb05a31167f4ba492909ec941a54533: http://schemas.datacontract.org/2004/07/」の「BarProxy3bb05a31167f4ba492909ec941a54533」は想定されていません。既知の型のリストに静的に認識されていない型を追加します。たとえば、KnownTypeAttribute 属性を使用するか、DataContractSerializer に渡される既知の型のリストにそれらを追加します。
foo クラスに KnownType 属性を追加してみました
[KnownType(typeof(Bar))]
しかし、私はまだ同じエラーが発生します。
誰でもこれで私を助けることができますか?
どうもありがとう
デイブ