RestSharp を使用して MVC エントリ ポイントへの Rest アクセスを構築しています (実際にはモノタッチから使用できるようになっていますが、現在は Windows 7、vs2010、.net 4、RestSharp 104.1 でテストしています)。
リクエストを作成して呼び出すと
client.ExecuteAsPost<Model.Client>( request );
それは動作します、フィドラーで生のパケットを見ることができます
POST http://localhost.:49165/Services/Client/ClientAdminService/FindClient HTTP/1.1
Timestamp: Monday, March 18, 2013 1:56:02 AM
X-PS-Authentication: YADAYADA:<deleted for brevity>==
Accept: application/xml
User-Agent: RestSharp 104.1.0.0
Content-Type: application/xml; charset=utf-8
Host: localhost.:49165
Content-Length: 256
Accept-Encoding: gzip, deflate
Connection: Keep-Alive
<Client xmlns="http://schemas.datacontract.org/2004/07/PSRMWebService.Model.Version1" xmlns:i="http://www.w3.org/2001/XMLSchema-instance"><ID>0</ID><MailingAddress i:nil="true"/><Mask>Name</Mask><Name>Rykercom</Name><PhysicalAddress i:nil="true"/></Client>
ご覧のとおり、最後にサーバーに送信する必要があるシリアル化されたデータ blob (Model.Client 型) があり、これは次を使用してリクエストに追加されます。
Request.AddParameter("application/xml; charset=utf-8", DataPacket, RestSharp.ParameterType.RequestBody);
ここで、DataPacket は、DataContractSerializer を使用して作成されたシリアル化された BLOB です。
コードを変更して呼び出すと
Client.ExecuteAsyncPost<Model.Client>(Request, (response, handle) => { OnFindClientAsyncComplete(response, handle, Callback ); }, "POST");
Fiddler を使用すると、ボディもコンテンツ タイプもないまったく異なるパケットが得られるため、サーバーからの応答が失敗します。
POST http://localhost.:49165/Services/Client/ClientAdminService/FindClient HTTP/1.1
Timestamp: Monday, March 18, 2013 2:35:08 AM
X-PS-Authentication: YADAYADA:<deleted for bevity>==
Accept: application/xml
User-Agent: RestSharp 104.1.0.0
Host: localhost.:49165
Content-Length: 0
Accept-Encoding: gzip, deflate
Connection: Keep-Alive
X-PS-Authentication は単なるカスタム認証文字列です。非同期呼び出しで空のメッセージ本文が残される理由は誰にでもありますか?