Веб-служба ASMX не возвращается в jQuery

РЕШЕНО: ВЫ НЕ МОЖЕТЕ ВОЗВРАТИТЬ СЛОВАРЬ ИЗ ВЕБ-СЕРВИСА AJAX, ИСПОЛЬЗУЙТЕ СПИСОК!

Я пытаюсь вызвать веб-службу ASP.NET из jQuery.

Веб-служба запускается, но результаты не возвращаются в javascript. Есть идеи, почему? Я думаю, что я мог что-то упустить в web.config или ..?

jQuery:

function GetAccountTypes() {
        var ddl = $("#ListBoxType");
        clearSelect(ddl.attr("id"));
        $.ajax({
            type: "POST",
            url: "WebService.asmx/GetAccountTypes",
            data: "{}",
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: function (response) {
                alert(response.d);
                var accTypes = response.d;
                var options = ddl.attr("options");
                $.each(accTypes, function (index, accType) {
                    options[options.length] = new Option(accType.Value, accType.Key); 
                });
            },
            failure: function (msg) {
                alert(msg);
            }
        });
    }

Веб-сервис:

[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
// To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line. 
[System.Web.Script.Services.ScriptService]
public class WebService : System.Web.Services.WebService {

public WebService()
{
}

[WebMethod]
public Dictionary<int, string> GetAccountTypes() {
    Dictionary<int, string> types = new ATDB().GetAccountTypes();
    return types;
}

}

веб.конфигурация:

<configuration>
  <system.web>
    <compilation debug="true" targetFramework="4.0"/>
  </system.web>
</configuration>

Установка точки останова в функции js и в методе веб-службы показывает, что метод работает, но никогда не достигает «успеха» или «сбоя».


person Jesper    schedule 12.03.2013    source источник
comment
Лучший друг Ajax-программиста: Fiddler. Используйте его, чтобы определить, каков на самом деле ответ веб-сервера. Это многое скажет вам о том, что может быть не так. fiddler2.com/fiddler2   -  person Ann L.    schedule 12.03.2013
comment
ваша функция GetAccountTypes() ждет формат json... вы уверены, что служба возвращает словарь в формате json??   -  person Zach dev    schedule 12.03.2013


Ответы (2)


Что ж, я обнаружил, что вы не можете вернуть словарь из веб-службы, поскольку он реализует IDocctionary и не сериализуем. Решение. Верните список простого пользовательского объекта.

person Jesper    schedule 12.03.2013

ваша функция GetAccountTypes() ждет формат json... вы уверены, что служба возвращает словарь в формате json?? Я думаю нет.

веб-службы — это веб-службы на основе SOAP, вы можете рассмотреть возможность переноса своих веб-служб на WCF, в котором вы будете иметь большой контроль над форматом вывода, который вам нужен.

проверить этот материал

http://blog.clauskonrad.net/2010/11/how-to-expose-json-endpoint-from-wcf.html

person Zach dev    schedule 12.03.2013