执行POST到REST WCF服务时,会收到无法识别的异常

时间:2011-10-19 09:57:50

标签: wcf rest wcf-rest

我有一个REST POST方法如下:

[WebInvoke(BodyStyle = WebMessageBodyStyle.WrappedRequest, ResponseFormat = WebMessageFormat.Xml, RequestFormat = WebMessageFormat.Xml)]
string GetFromXml(XElement xmlString);

我正在尝试使用以下代码从我的客户端进行后期操作:

var client = new RestClient();
client.BaseUrl = "http://localhost/XMLRestService/XmlService.svc";
var request = new RestRequest(Method.POST);
request.Resource = "GetFromXml";
client.AddDefaultHeader("Content-Type", "text/xml");            
request.AddBody(obj, "XMLRestService");            
var response = client.Execute(request);

当我执行上述操作时,我收到400 Bad请求。然后,我在WCF服务上启用了跟踪。并且堆栈跟踪给了我一个无法识别的消息版本,这个版本被System.ServiceModel.CommunicationException类抛出了。

我无法成功发布请求。帮助赞赏。

3 个答案:

答案 0 :(得分:0)

我要尝试的第一件事是使用application / xml而不是text / xml

答案 1 :(得分:0)

我终于找到了异常的根本原因。以下代码非常完美:

var client = new RestClient();
client.BaseUrl = serviceBaseUrl;
var request = new RestRequest(method){RequestFormat = DataFormat.Xml};
request.Resource = resourceUrl;
request.AddParameter("text/xml",requestBody, ParameterType.RequestBody);
var response = client.Execute(request);

作为参数发送的requestBody应该是序列化的xmlString。

注意:如果REST服务上公开的复合类型使用的是DataContractSerializer,那么请确保使用DataContractSerializer生成requestBody,如果使用XmlSerializer,则使用XmlSerializer生成requestBody。

答案 2 :(得分:0)

将您的请求附在肥皂信封中。我DIY我的请求,当我忘记做必要时我得到了这个错误。

契约优先,javascript,ajax,jquery,都要求你处理细节。对我而言,这是一个毫无疑问的事情,但是我几个小时都没有看到明显的事情。