ユーザーがPOSTの本文でPickupオブジェクトをXMLとして渡すことを可能にする単純なサービスをセットアップしようとしています。ストリーム型を受け取るようにサービスを設定すると、正常に動作するようになりますが、カスタム型の代わりに正常に動作させるために何を変更する必要があるのか わかりません。ピックアップ タイプを期待するようにサーバーに指示すると、「リクエスト エラーです。サーバーが遭遇しました...」というメッセージが表示されます。
これを機能させるためにサーバー/クライアントで何を変更する必要があるかを誰かが教えてくれます。
マイデータ契約
[DataContract]
public class Pickup
{
[DataMember]
public string DelZip
{ get; set; }
}
運営契約
[OperationContract]
[WebInvoke(Method = "POST",
UriTemplate = "/pickups",
RequestFormat = WebMessageFormat.Xml,
ResponseFormat = WebMessageFormat.Xml,
BodyStyle = WebMessageBodyStyle.Bare)]
string RequestPickup(Pickup pickup);
public string RequestPickup(Pickup pu)
{
return pu.DelZip;
}
構成
<services>
<service name="TestAPI.Services.TestServices" >
<endpoint address=""
binding="webHttpBinding" behaviorConfiguration="webHttp"
contract="TestAPI.Services.ITestServices" />
</service>
</services>
<behaviors>
<endpointBehaviors>
<behavior name="webHttp">
<webHttp/>
</behavior>
</endpointBehaviors>
</behaviors>
私のクライアントコード
const string url = "http://localhost:18463/TestServices.svc/pickups";
req = (HttpWebRequest)WebRequest.Create(url);
req.Method = "POST";
req.ContentType = "application/xml";
var xmlDoc = new XmlDocument { XmlResolver = null };
xmlDoc.LoadXml(@"<Pickup><DelZip>55555</DelZip></Pickup>");
string sXml = xmlDoc.InnerXml;
req.ContentLength = sXml.Length;
var sw = new StreamWriter(req.GetRequestStream());
sw.Write(sXml);
sw.Close();
res = (HttpWebResponse)req.GetResponse();
Stream responseStream = res.GetResponseStream();
var streamReader = new StreamReader(responseStream);