2010-08-26 2 views
0

Я пытаюсь вызвать веб-службу для извлечения некоторых данных 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, который вызывает проблему. На данный момент я реализовал эту функциональность на стороне сервера приложения, но я намерен пересмотреть это, когда я получу некоторое время.

ответ

0

Мое первое предположение заключалось в том, что тип контента был неправильным. Что вы видите, когда смотрите на поток, используя Fiddler или подобное?

+0

Hi John, С Fiddler, захватывающим трафик, я вижу ошибку HTTP 500 для Services/CheckOutService.svc/GetXMLData, как ожидалось. На вкладке «Заголовки» есть элемент Entity, Content-Type которого установлен в «application/json; charset = utf-8». Это может быть проблема? \t Кроме того, что вы подразумеваете под «потоком»? Есть ли что-то конкретное, на что я должен смотреть? – Malice

+0

Ну, вы говорите выше, что вы отправляете XML, и этот заголовок должен быть для отправки JSON, так что там есть несоответствие. Под «потоком» я имею в виду все это, заголовки и тело сущности и соответствует ли оно тому, что вы ожидаете. Если вы отправляете XML, вы должны отправлять тип содержимого XML, а не JSON. –

+0

Спасибо за быстрый ответ. Поэтому, если мой запрос Ajax имеет свой тип данных, установленный в XML, а для параметра ResponseFormat метода веб-службы задано значение WebMessageFormat.Xml, где задано значение json, и что еще более важно, как его изменить? – Malice

Смежные вопросы