我正在尝试调用Web服务从数据库中检索一些XML数据。如果我使用静态文件,Ajax调用工作正常,例如像这样:
$.ajax({
type: "GET",
url: "test2.xml",
data: buildXMLDataRequestObject(),
dataType: "xml",
success: getXMLDataSucceeded,
error: getXMLDataFailed
});
但是当我尝试调用Web服务时失败,例如像这样:
$.ajax({
type: "POST",
url: "Services/CheckOutService.svc/GetXMLData",
data: buildXMLDataRequestObject(),
dataType: "xml",
success: getXMLDataSucceeded,
error: getXMLDataFailed
});
我得到的错误是:
“收到的消息有一个 意外的消息格式'Raw'。该 预期的消息格式 操作是'Xml','Json'。这个可以 因为WebContentTypeMapper具有 尚未在绑定上配置。 请参阅文档 WebContentTypeMapper更多 方式“。
GetXMLData方法如下所示:
// Interface
[OperationContract]
[WebInvoke(ResponseFormat = WebMessageFormat.Xml, BodyStyle = WebMessageBodyStyle.WrappedRequest)]
string GetXMLData(XMLDataRequest request);
...
// Implementation
public string GetXMLData(XMLDataRequest request)
{
request.ShopperId = ShopperId;
return checkOutManager.GetXMLData(request);
}
GetXMLData方法已配置为返回XML,并且Ajax调用的数据类型设置为XML,因此我非常对导致错误的原因感到困惑。
编辑:如果我稍微改变$ .ajax()调用以便指定contentType,我会收到此错误:
根级别的数据无效。 第1行,第1位。
我尝试过contentType:“text / xml”和contentType:“application / xml”,两者都给出了同样的错误。
编辑:昨天(8月30日)我注意到如果我省略了ajax调用的data参数,服务调用就会成功。我想有一些关于JSON对象导致问题的事情。现在我已经在应用程序的服务器端实现了这个功能,但是我打算在我有时间的时候再次访问它。
答案 0 :(得分:0)
我的第一个猜测是内容类型错误。当你使用Fiddler或类似的东西观察流时,你看到了什么?