Я пытаюсь вызвать веб-службу для извлечения некоторых данных XML из базы данных. Вызов Ajax отлично работает, если я использую статический файл, например. например:Проблема извлечения данных XML из веб-службы ASP.NET
$.ajax({
type: "GET",
url: "test2.xml",
data: buildXMLDataRequestObject(),
dataType: "xml",
success: getXMLDataSucceeded,
error: getXMLDataFailed
});
но не удается, когда я пытаюсь вызвать веб-службу, например. как это:
$.ajax({
type: "POST",
url: "Services/CheckOutService.svc/GetXMLData",
data: buildXMLDataRequestObject(),
dataType: "xml",
success: getXMLDataSucceeded,
error: getXMLDataFailed
});
Ошибки я получаю:
"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."
Метод 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, так что я очень смущен относительно того, что вызывает ошибку.
EDIT: Если я изменить $ .ajax() называют немного, так что CONTENTTYPE задан я получаю эту ошибку:
The data at the root level is invalid. Line 1, position 1.
Я попытался CONTENTTYPE: "Текст/XML" и CONTENTTYPE: " application/xml "и обе дают ту же ошибку.
EDIT: Вчера (30 августа) Я заметил, что вызов службы будет успешным, если я опустил параметр данных для вызова ajax. Я думаю, что есть что-то о объекте JSON, который вызывает проблему. На данный момент я реализовал эту функциональность на стороне сервера приложения, но я намерен пересмотреть это, когда я получу некоторое время.
Hi John, С Fiddler, захватывающим трафик, я вижу ошибку HTTP 500 для Services/CheckOutService.svc/GetXMLData, как ожидалось. На вкладке «Заголовки» есть элемент Entity, Content-Type которого установлен в «application/json; charset = utf-8». Это может быть проблема? \t Кроме того, что вы подразумеваете под «потоком»? Есть ли что-то конкретное, на что я должен смотреть? – Malice
Ну, вы говорите выше, что вы отправляете XML, и этот заголовок должен быть для отправки JSON, так что там есть несоответствие. Под «потоком» я имею в виду все это, заголовки и тело сущности и соответствует ли оно тому, что вы ожидаете. Если вы отправляете XML, вы должны отправлять тип содержимого XML, а не JSON. –
Спасибо за быстрый ответ. Поэтому, если мой запрос Ajax имеет свой тип данных, установленный в XML, а для параметра ResponseFormat метода веб-службы задано значение WebMessageFormat.Xml, где задано значение json, и что еще более важно, как его изменить? – Malice