を書くのは、私は、このようなは手動でWCFのPOXの記事に
[ServiceContract]
public interface IContract
{
[OperationContract]
[WebInvoke(Method="POST", RequestFormat=WebMessageFormat.Xml, BodyStyle=WebMessageBodyStyle.Wrapped)]
string ComplexPost(string name, ComplexType data);
}
そして、データコントラクトとしてWCFの契約を結んでいるとしましょう:
[DataContract(Name="ComplexType", Namespace="")] // don't know if those atts are req'd or not but saw them in another example
public class ComplexType
{
public string StringData { get; set; }
public int IntData { get; set; }
public DateTime DateValue { get; set; }
}
私は要求がより多くを持っているために包まれなければならないことを知っています明らかに1つ以上のルートを持つXML文書を持つことはできません。
問題は、ドキュメンテーションが本当にあなたがそれをラップする必要があるかどうかについてはまばらです。
目標はWCFでこれを消費することではなく、汎用XML Webサービスとしてクライアントにアクセス可能である必要があります。彼らはWCFの知識を持っていなくても、.NETを使用することさえできません。
明らかに私はComplexPostという名前(メソッド名と同じ)を持つ要素が名前空間http://tempuri.org/であることを期待していることを私は知ることができます。
<ComplexPost xmlns="http://tempuri.org/">
...what exactly?
</ComplexPost>
目標は、特にRESTの原則を遵守することではありません。私は、UriTemplateにいくつかのパラメータを埋め込んだ答えを探しているのではなく、ただ一つの複雑なオブジェクトを残して、Bareの仕事をしています。私は、POST本体内のすべてのデータを含む一般的な解決策を探しています。ここではフィドラー
で見つかり
は、私がバイオリンを使用して見つけたものに基づいて、結果がどうなるか程度です。
<ComplexPost xmlns="http://tempuri.org/">
<name>Value of name parameter</name>
<data xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
<StringData>The StringData property value</StringData>
<IntData>10</IntData>
<DateValue>2009-07-07T15:38:39.7738012-05:00</DateValue>
</data>
<ComplexPost>
したがって、wrapper要素は、ServiceContractで指定されたXML名前空間を持つメソッド名であり、そうでない場合はtemppuri.orgです。
各パラメータは、順番に、基本型が文字列表現に非常に簡単に直列化された子要素になります。
nullable DateTimeなどのnull可能な値でテストを行いました。どうやらxmlns:i = "http://www.w3.org/2001/XMLSchema-instance"という宣言は、それが必要となる前に発生していなければなりません。そして、null値の場合、それはi:nil = "true"たとえば、
<NullableDateProperty i:nil="true" />
DataContractオブジェクトでは、子複合型または複雑なオブジェクトのリストを持つことも非常に簡単でした。
....
<ChildObjectPropertyName>
<PropertyOfChildObject>value</PropertyOfChildObject>
...
</ChildObjectPropertyName>
<ListProperty>
<ObjectType>
<ObjectProperty>value</ObjectProperty>
....
</ObjectType>
...
</ListProperty>
この
は完全ではないかもしれませんが、レッスンは間違いなく作業WCFクライアントを取得し、フィドラーとの交流を調べています。ありがとう、チーズ!
Fiddler2を使用すると効果的でした!質問を編集して私が見つけたものを表示します。 –