複数のサービスで使用される、論理的に同じ DataContract
[サービス参照の追加... ] メニュー オプションを使用して、WCF サービス クライアントの通常の方法でサービス参照を追加している可能性があります。これを行うと、Reference.cs
サービスごとにファイルが生成され、サービスごとに異なる名前空間が作成されます。ただし、サービス間でコントラクトを共有しているため、[サービス参照の追加] ダイアログの [詳細...] ボタンをクリックし、[参照されたアセンブリで型を再利用] がオンになっていることを確認し、(最も簡単な方法で) [すべての参照されたアセンブリで型を再利用] がオンになっていることを確認する必要があります。がチェックされます。
[DataContract]
これらのクラスを含むアセンブリへの通常のプロジェクトまたはアセンブリ参照が実際にない場合、これは機能しません。したがって、それらの参照を追加します。これらのクラスがサーバー側の実装に混在している場合は、それらを独自のアセンブリに移動し、クライアントとサーバーの両方で参照する必要があります。
複数のサービスで使用される、論理的に異なる DataContract
1 つのサービス クライアントに対して 1 つのコントラクトを使用し、別のサービス クライアントに対して 1 つのコントラクトを使用している 2 つの異なるタイプのユーザー (つまり、2 つの異なるコントラクト) が本当にある場合は、参照されたアセンブリで型を再利用するがチェックされていないことを確認する必要があります。各サービス参照は異なる名前空間にあります。
別の方法は、宣言するときにそれぞれに異なる名前を使用することです。
[DataContract(Name = "User"]
public class User { ... }
[DataContract(Name = "CompanyUser")]
public class User { .... }
上記のコードは、各User
クラスが異なるサーバー側の名前空間にあり、アセンブリも異なる可能性があることを前提としています。