2011-01-19 4 views
22

- 他の相違点bが何をしている - のDataContractは、これとは別に唯一のクラス、構造体や列挙型のためのDataContractとのServiceContract違い私の知る限りKNWとして

を使用Bすることができ、一方、

のServiceContractは、インタフェース/クラスに使用することができます/これら2? アプリケーションでDataContractとServiceContractを使用する必要がある場合

サンプルまたはリンクもあります。 ありがとうございます。

答えて

62

ServiceContractは、サービスの契約形態とその形状を定義します。これはサービスの名前とそのXML名前空間などを定義します。通常、サービスメソッドである[OperationContract]属性で装飾されたメソッドを含むインターフェースです(クラスにも適用できます)。

[ServiceContract] 
public interface IMyService 
{ 
    [OperationContract] 
    Response GetData(int someKey); 
} 

のDataContract全く別の獣である - それは、サービスのいずれかの方法から、パラメータまたは戻り値として使われているクラスとして定義したクラスを飾ります。このクラスをクラスにラベル付けして、それを送信するためにワイヤにシリアル化する「もの」としています。これは、WCFサービスでこのクラスを使用するためのWCFランタイム(データコントラクトシリアライザ)のための命令です。

[DataContract] 
public class Response 
{ 
    [DataMember] 
    int Key { get; set; } 

    [DataMember] 
    string ProductName { get; set; } 

    [DataMember] 
    DateTime DateOfPurchase { get; set; } 
} 

だから、サービス契約およびデータコントラクトは、WCFサービスを機能させるために一緒に遊ぶ2つのまったく別の部分です - 1つが他のか何かを置き換えることができるようではありません。

+2

大きな説明。 – Wallstrider

+5

まあ!私はC#開発者ではないことを後悔します! C#は素晴らしいです!あなたの説明はすごいです! – Farah

+1

すばらしい説明! '[ServiceContract]'でクラスをデコレートする特別なケースはありますか?それとも、それをインターフェースとしてのみ使用することをお勧めしますか? –

関連する問題