複雑な型を入力として受け取る REST & json ベースの WCF サービスを構築しようとしています。クライアントでは、WCF REST スターター キットの一部として提供される HttpClient を使用して、このサービスを利用しようとしています。
以下は私のサービスコードです:
[WebInvoke(Method = "POST", UriTemplate = "/SendData", BodyStyle = WebMessageBodyStyle.Wrapped)]
public void SendData(List<EditorData> input)
{
//Do something
}
WebMessageBodyStyle 列挙型にある他のオプションを使用しましたが、役に立ちませんでした。
これは、クライアントでも使用している複雑な型のデータ コントラクトです。
public class EditorData
{
public string key { get; set; }
public long quesno { get; set; }
public string quescontent { get; set; }
}
クライアントコード:
List<EditorData> listEditor = new List<EditorData> { new EditorData { key = "key1", quescontent = "qcontent1", quesno = 1},new EditorData { key = "key2", quescontent = "qcontent2", quesno = 2}};
string jsonEditorList = listEditor.ToJSON();
HttpClient client = new HttpClient("http://localhost/RestWcfService/RestService.svc/");
client.DefaultHeaders.Accept.Add("application/json");
HttpResponseMessage response = null;
response = client.Post("SendData", HttpContent.Create(jsonEditorList));
response.EnsureStatusIsSuccessful();
カスタム オブジェクト リストを json 文字列に変換するために、ここで見つけた拡張メソッドを使用しています。
このアプリケーションを実行すると、次のエラーが表示されます。
BadRequest (400) is not one of the following: OK (200), Created (201), Accepted (202), NonAuthoritativeInformation (203), NoContent (204), ResetContent (205), PartialContent (206)
何かご意見は?
編集:
フィドラーのスクリーンショットは次のとおりです。
アップデート:
Jason Freitas の提案に従って、フィドラーで応答を確認しました。これは言うことです:
The server encountered an error processing the request. See server logs for more details.
だから私はIISログに行きました.IISに記録されたエラーは次のとおりです:
2012-02-15 13:20:08 fe80::ecdd:d2dd:7f70:bef6%11 POST /RestWcfService/RestService.svc/SendData - 80 - fe80::ecdd:d2dd:7f70:bef6%11 - 400 0 0 0
更新 2
Rajesh の提案に従って、wcf サービスのトレースを有効にしました。以下は、サーバーによってスローされる例外です。
The incoming message has an unexpected message format 'Raw'. The expected message formats for the operation are 'Xml', 'Json'. This can be because a WebContentTypeMapper has not been configured on the binding. See the documentation of WebContentTypeMapper for more details.
コンテンツ タイプを json として指定した場合、どのように Raw 形式になるのかまだわかりません。