私はWCFを初めて使用しますが、今日、DataContractsで問題が発生しました。オブジェクトがWCFサービスからクライアントに返されるときに例外が発生します。
SvcTraceViewerは次の例外を示しています。
データコントラクト名 が 「 Person_7C797A477DD73534D4E8E743E1FCC1C75DAB75933D03B845A097 DataContractResolverを使用するか、既知のタイプのリストに静的に不明なタイプを追加することを検討してください。たとえば、KnownTypeAttribute属性を使用するか、DataContractSerializerに渡される既知のタイプのリストに追加します。
解決策としていくつかのプロジェクトがあります。
- DataAccess(EntityFramework EDMXファイルはここに配置されます)
- モデル(DbContextGeneratorによって生成されたエンティティはここにあります)
- WCFサービス(DataContractsは
Model
プロジェクトに実装されています) - WPFアプリケーション(ServiceHostを実行)
- コンソールアプリケーション(WPFアプリケーションでホストされているWCFプロジェクトまたはサービスを呼び出します)
WCFの運用契約は次のとおりです。
[OperationContract]
Person[] GetAllPersons(int version);
インターフェイスの実装:
public Person[] GetAllPersons(int version)
{
return StorageService.GetAllPersons(version);
}
クライアント側(ConsoleApp)でデータを受信すると、例外がスローされます。
部分的なクラスであるため、問題は生成されたエンティティに関連していると思います
これがPersonクラスです:
public partial class Person
{
public Person()
{
this.Project = new HashSet<Project>();
}
public int Id { get; set; }
public Nullable<long> AddressId { get; set; }
public string LastName { get; set; }
public string MiddleName { get; set; }
public string FirstName { get; set; }
public Nullable<long> GeoLocationId { get; set; }
public string FullGeoLocationName { get; set; }
public Nullable<long> SupervisorId { get; set; }
public Nullable<long> PositionId { get; set; }
public string Position { get; set; }
public string Office { get; set; }
public string NativeName { get; set; }
public string Location { get; set; }
public string FullName { get; set; }
public Nullable<long> PmcPersonId { get; set; }
public virtual ICollection<Project> Project { get; set; }
public virtual PersonDataVersion DataVersion { get; set; }
public virtual Workspace Workspace { get; set; }
}
クラスとそのメンバーに属性を付けようとしまし[DataContract]
た[DataMember]
が、それでもエラーが発生します。[KnownType(typeof(Person)]
属性も役に立ちませんでした。
生成されたエンティティをデータコントラクトとして使用することは可能ですか?