错误请求:WCF REST服务和初学者工具包

错误请求:WCF REST服务和初学者工具包,wcf,wcf-rest,wcf-rest-starter-kit,Wcf,Wcf Rest,Wcf Rest Starter Kit,我正在尝试构建一个基于REST&json的WCF服务,该服务将复杂类型作为输入。在客户端上,我尝试使用作为WCF REST初学者工具包一部分的HttpClient使用此服务 以下是我的服务代码: [WebInvoke(Method = "POST", UriTemplate = "/SendData", BodyStyle = WebMessageBodyStyle.Wrapped)] public void SendData(List<EditorData> input) { //

我正在尝试构建一个基于REST&json的WCF服务,该服务将复杂类型作为输入。在客户端上,我尝试使用作为WCF REST初学者工具包一部分的HttpClient使用此服务

以下是我的服务代码:

[WebInvoke(Method = "POST", UriTemplate = "/SendData", BodyStyle = WebMessageBodyStyle.Wrapped)]
public void SendData(List<EditorData> input)
{
//Do something
}
客户端代码:

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();
有什么想法吗

编辑:

以下是fiddler的屏幕截图:

更新:

根据Jason Freitas的建议,我在fiddler中检查了响应。这就是所说的:

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时,我仍然不明白它是如何获得原始格式的。

[WebInvoke]
默认为XML序列化。您需要告诉它您正在以JSON的形式发送数据。在WebInvoke属性中设置RequestFormat,如下所示


RequestFormat=WebMessageFormat.Json

[WebInvoke]
默认为XML序列化。您需要告诉它您正在以JSON的形式发送数据。在WebInvoke属性中设置RequestFormat,如下所示

RequestFormat=WebMessageFormat.Json

首先尝试在WCF服务上启用,以查看400错误请求错误的确切原因

似乎正在发布的输入的格式不正确。您已经将EditorData列表定义为该方法的参数,并发布了一些键值对(参考fiddler屏幕截图),确保在反序列化时fiddler中的json字符串转换为EditorData对象列表

您还将主体样式设置为包裹。试着移除它,看看它是否有效。当您有多个参数时,将使用包装请求,然后在这种情况下,将所有参数包装在methodname元素中,并通过连接发送

更新:

请确保将内容类型添加到标题,如下所示:

client.DefaultHeaders.ContentType = "application/json";
首先尝试在WCF服务上启用,以查看400错误请求错误的确切原因

似乎正在发布的输入的格式不正确。您已经将EditorData列表定义为该方法的参数,并发布了一些键值对(参考fiddler屏幕截图),确保在反序列化时fiddler中的json字符串转换为EditorData对象列表

您还将主体样式设置为包裹。试着移除它,看看它是否有效。当您有多个参数时,将使用包装请求,然后在这种情况下,将所有参数包装在methodname元素中,并通过连接发送

更新:

请确保将内容类型添加到标题,如下所示:

client.DefaultHeaders.ContentType = "application/json";

Fiddler中的响应窗口说了什么?尝试关闭customErrors以查看是否收到更详细的错误消息。我使用fiddler响应更新了原始帖子。谢谢请在下面我的回答中查看我的更新Fiddler中的响应窗口说了什么?尝试关闭customErrors以查看是否收到更详细的错误消息。我使用fiddler响应更新了原始帖子。谢谢请在下面的回复中查看我的更新谢谢你的评论Rajesh,我已经为我的服务启用了跟踪功能,并且我已经用我的发现更新了原始帖子(UPDATE2)。请查看我的更新,并在添加内容类型后解决错误。感谢你的评论Rajesh,我已经为我的服务启用了跟踪功能,并用我的发现更新了原始帖子(UPDATE2)。请查看我的更新,并在添加内容类型后解决您的错误。这不起作用,似乎对服务没有任何影响-非常不幸,因为我认为它会做完全相同的事情-更好的问题是,为什么heck wcf无法找出json vs XML的请求体-看起来非常简单,并且可以这样工作在WebApi中:-这不起作用,似乎对服务没有任何影响-非常不幸,因为我认为它会做完全相同的事情-更好的问题是,为什么heck wcf无法找出json与XML的请求体-看起来非常简单,在WebApi中也是如此:-
client.DefaultHeaders.ContentType = "application/json";