2012-02-08 14 views
0

私はXMLを返すWCF RESTサービスを作成しています。XMLオプションのWCF REST

私は方法

[OperationContract] 
[WebInvoke(Method = "GET", RequestFormat = WebMessageFormat.Xml, UriTemplate = "?listcameras", ResponseFormat = WebMessageFormat.Xml)] 
List<TItem> ListItems(); 

TITem

このメソッドを呼び出すときに私は、その後のHttpWebRequestからXMLに戻っ取得
[DataContract(Name = "SomeContract", Namespace = "")] 
public class TITem 
{ 
    [DataMember] 
    public string Member1 
    { 
     get; 
     set; 
    } 

    [DataMember] 
    public string Member2 
    { 
     get; 
     set; 
    } 
} 

、 XMLでタイプTITem年代のリストとのインタフェースを持っています。上記の注意事項は、Namespace = "" 以外はXDocumentを使用できないようにする必要があります。子孫メソッドと一致する名前を取得します。

これは、一部のWCFサービスからXMLを取り戻す最善の方法であれば、私はちょっと意見があります。 私のWCFサービスを拡張可能にし、今後XML以外のものを返すことを望みます。

答えて

0

string.Emptyという名前空間を使用することに問題はありません。ネームスペースを使用することの全ポイントは、同じDataContract名を持つが、別のDataContractネームスペースを持つ他のデータコントラクトと区別することです。これは、DataContractの名前/名前空間がCLR型の表現から派生した名前/名前空間に必ずしも関係しないため、特に重要です。

つまり、アプリケーションの別の名前空間に同じデータコントラクト名を持つ他の型(および)が存在しないことがわかっている場合は、バージョン管理考慮事項 - データコントラクトネームスペースとしてstring.Emptyを引き続き使用できます。

操作属性(WebGet/WebInvoke)だけでなく、現在使用しているバインディングと動作、および今後使用するバインドと動作を考慮する必要があります。たとえば、WebHttpBindingとWebHttpBehaviorを使用している可能性があります。 WebHttpBindingレベルでサポートされているデータフォーマット(XML、JSON、Binaryなど)を制御することもできます.WebHttpBehaviorから返されるXMLのTYPEを制御することもできます。XMLは「裸」でもよいし、ラップされた "、それは余分な入れ子を持っています。最後に、独自のDataContractSerializerOperationBehaviorをプラグインして、まったく新しいシリアライザまたは独自のデータフォーマットをプラグインすることもできます(そうした場合は、独自のシリアライザ、フォーマッタ、ビヘイビアを実装する必要があります) 、バインディング、エンコーダーなど)は、SOAPとJSONのために行われました。