2012-01-25 27 views
2

これはどのようにWCFサービスとして機能しますか?WCF汎用クラス

public class BusinessObject<T> where T : IEntity 
{ 
    public T Entity { get; set; } 

    public BusinessObject(T entity) 
    { 
     this.Entity = entity; 
    } 
} 

public interface IEntity { } 

public class Student : IEntity 
{ 
    public int StudentID { get; set; } 
    public string Name { get; set; } 
} 

私は<てBusinessObject T >クラスとWCFサービスでIEntityインターフェイスを継承するすべてのクラスを公開します。

私のコードはC#、.NET Framework 4.0、Visual Studio 2010 Proでビルドされています。

答えて

6

BusinessObjectsをWCF経由でクライアントに公開するときは、クローズジェネリック型を使用してBusinessObjectをクライアントに公開する必要があります。

+0

しかし、学生だけがタイプTのタイプではありません。私は多くのエンティティクラスを持っています。 –

+0

私は今理解していますが、すべてのエンティティクラスにDataContract属性とDataMember属性を追加する必要がありますか? –

+0

WCFのサービス指向の性質はこれを許可しません。クライアントの視点から考える。クライアントが電話をするまでに契約はよく分かっているはずです。 – chandmk

2

KnownType属性は、契約のタイプデータがwsdlメタデータに確実に追加されるようにする方法です。これはインターフェイスでは動作しないクラスに対してのみ機能します。インターフェースはデータを格納することができず、そこにあるすべての言語で一意に理解されるわけではありません。したがって、wcfで実際には公開できません。ここをクリックしてください。http://social.msdn.microsoft.com/forums/en-US/wcf/thread/7e0dd196-263c-4304-a4e7-111e1d5cb480

1

WCFが未知の型を動的にシリアライズできるように、ホストでDataContractResolverビヘイビアを登録する必要があります。ここではより多くの情報を参照してください:言っ

http://msdn.microsoft.com/en-us/library/ee358759.aspx

は、タイプがまだ共通の基底クラス私の知る限りはいえ、ジェネリック型閉じする必要があります。

関連する問題