Веб-служба C # не будет выводить JSON, только XML - PullRequest
8 голосов
/ 19 марта 2009

Я пытаюсь использовать jQuery и JSON с веб-службой C #, которую я написал. Несмотря ни на что, следующий код будет выводиться только в формате XML.

Код веб-сервиса

[WebMethod]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public string HelloWorld() {
    return "Hello World!";
}

У меня также есть эти атрибуты, присвоенные классу

[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[ScriptService]

JQuery код

$.ajax({
    type: "POST",
    contentType: "application/json; charset=utf-8",
    url: "ScheduleComputerDS.asmx/HelloWorld",
    data: "{}",
    dataType: "jsonp",
    success: function(data) {
        alert(data);
    }
});

Страница ASMX всегда возвращается как тип содержимого "text / xml". Что-то я пропускаю?

РЕДАКТИРОВАТЬ: В ответ на пару ответов:

Если у меня есть тип данных как просто «json», то контент по-прежнему будет XML, и jQuery также не будет вызывать мою функцию обратного вызова. Если я добавлю "& callback =?" по URL-адресу IIS выдает ошибку HTTP 500.

Мой класс наследует от "System.Web.Services.WebService".

Проведя некоторые исследования ваших ответов, похоже, мне действительно нужно связываться с WCF. К сожалению, возвращаемый JSON больше предназначен для MS Ajax и является для меня бесполезным явлением. Я могу заглянуть в библиотеку с открытым исходным кодом, такую ​​как Jayrock или что-то подобное.

Спасибо за вашу помощь!

Ответы [ 4 ]

6 голосов
/ 19 марта 2009

Я думаю, что есть опечатка:

dataType: "jsonp",

Должно быть:

dataType: "json",
3 голосов
/ 19 марта 2009

У Рича Штраля есть очень простой пост, который должен помочь вам в этом.

http://www.west -wind.com / блог / сообщений / 164419.aspx

2 голосов
/ 19 марта 2009

Насколько я знаю, атрибут ScriptService позволяет службе автоматически создавать прокси-сервер JavaScript (добавляя / js к адресу конечной точки - ScheduleComputerDS.asmx / js в вашем случае). Он не позволяет вам называть операции службы так, как вы пытаетесь это сделать.

Вместо этого вы можете использовать службу RESTful WCF (для которой требуется .NET 3.5), к которой вы можете получить доступ, отправив URI правильной формы через HTTP GET.

1 голос
/ 19 марта 2009

Вы пробовали с типом данных json?

Также обратите внимание на статью Encosia «Использование jQuery для использования веб-служб ASP.NET JSON» по этому вопросу. Также есть хорошая информация о распространенных ошибках.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...