2012-01-13 6 views
1

私はWCFサービスを持っています。ここでは、「アイテムを処理する、数百の」リストを送信しています。理想的には、トラフィックを減らすために、私は WCF短縮フィールド名(XmlElement)?

public class Item 
{ 
    [XmlElement(ElementName = "u")] 
    public int UserID { get; set; } 
    [XmlElement(ElementName = "c")] 
    public string Code  { get; set; } 
    [XmlElement(ElementName = "d")] 
    public DateTime Date { get; set; } 
} 

は、しかし長い名前はまだすなわち、ユーザID、コード、日付、送信されているシオマネキのトラフィックを検査する。..そうなど、それらをマークすることにより、プロパティ名を短縮したいと思います。

WCFにショートネームを使用させる方法について考えてみませんか?

+0

あり、これを試して、帯域幅の使用量は、あなたの主な関心事である場合、あなたはあなたの顧客がそれを処理することができます与えられたあなたのサービスのホスト上で圧縮を有効にするために検討する必要があります – Dominik

+0

ああ、良い提案。 IISでgzipのような意味ですか? –

+0

はい、圧縮をインストールして有効にする必要があります – Dominik

答えて

3

それはXmlElement属性である必要はありません場合は、(おそらく一緒にクラスのDataContract属性を持つ)DataMember属性を使用し、それに応じてNameプロパティの設定することができます。例えば

:これは(あなたが考えてみれば論理的である)ただし、以下の効果を有すること

using System.Runtime.Serialization; // Add Reference to "System.Runtime.Serialization.dll" 

[DataContract] 
public class Item 
{ 
    [DataMember(Name = "u")] 
    public int UserID { get; set; } 
    [DataMember(Name = "c")] 
    public string Code  { get; set; } 
    [DataMember(Name = "d")] 
    public DateTime Date { get; set; } 
} 

注:あなたが(再)に結果のWSDL記述を使用している場合、それからC#クラスを生成しますsvcutil.exeを使用して、それは次のようになります。

[DataContract] 
public class Item 
{ 
    [DataMember()] 
    public int u { get; set; } 
    [DataMember()] 
    public string c  { get; set; } 
    [DataMember()] 
    public DateTime d { get; set; } 
} 

あなたはこれにしたい、と同様にあなたのコントロール下のクライアントを持っていない場合、あなたはクライアントとItemクラスの定義を共有することができます(つまり、共通のアセンブリを経由してそれを含む)。

+0

ご返信ありがとう、ありがとうございました –

3

DataMember属性を使用し、Nameを指定します。

+0

ご返信ありがとうございました –

2

することはWCFのために、それはちょうど側のコメントとして

[DataContract] 
public class Item 
{ 
    [DataMember (Name="u")] 
    public int UserID { get; set; } 
    [DataMember (Name="c")] 
    public string Code { get; set; } 
    [DataMember (Name="d")]   
    public DateTime Date { get; set; } 
} 
+0

返信いただきありがとうございます –