Jquery Call to REST собственный номер порта

Я только что попытался создать решение для VS 2010, чтобы попрактиковаться в использовании служб REST с помощью JQuery. Я использовал шаблон WCF REST Service Application. Он создал класс, который я назвал Services.cs, с методом, который я хотел бы вызвать:

  [WebGet(UriTemplate = "")]
    public List<SampleItem> GetCollection()
    {
        SampleItem item;
        List<SampleItem> lst = new List<SampleItem>();
        for (int i = 0; i < 12; i++)
        {
            item = new SampleItem { Prom = 1960 + i, Name = string.Format("Name {0}", i.ToString()) };
            lst.Add(item);
        }
        return lst;
    }

Global.asax.cs выглядит так: void Application_Start (отправитель объекта, EventArgs e) { RegisterRoutes(); }

    private void RegisterRoutes()
    {
        // Edit the base address of Service1 by replacing the "Service1" string below
        RouteTable.Routes.Add(new ServiceRoute("", new WebServiceHostFactory(), typeof(Service)));
    }

Затем я создал новый пустой веб-сайт asp.net, добавил файлы jquery и т. д. На странице default.htm мне нравится вызывать GetCollection, поэтому я добавил следующий код jquery.

    $(function () {
        var serviceUrl = ??????
        $.ajax({
            url: serviceUrl,
            type: 'POST',
            data: '{}',
            contentType: 'application/json; charset=utf-8',
            dataType: 'json',
            success: function (colD) {
                var col = colD.d;
            }

        });
    });

какой URL я должен указать? особенно мне трудно определить порт на моем hostlocal. Я попробовал http://localhost:5187/KendoRestService/GetCollection, где KendoRestService — это имя проекта REST. и пространство имен в service.cs. Любая помощь будет принята с благодарностью.


person Frenchi In LA    schedule 13.03.2012    source источник


Ответы (2)


Я считаю, что вы хотели бы дать [WebGet(UriTemplate = "")] значение, то есть [WebGet(UriTemplate = "getCollection")]

Тогда URL-адрес javascript будет:

var serviceUrl = ServiceName/UriTemplate

так что в вашем случае:

var serviceUrl = '/getCollection';
person j-u-s-t-i-n    schedule 13.03.2012
comment
Нет, это не сработало. Я поставил точку на getCollection, но она никогда не идет туда, ни на успешную часть вызова ajax. В моем решении есть 2 проекта. - person Frenchi In LA; 14.03.2012
comment
Вы пытались изменить параметр typeof(Service) так, чтобы он указывал на dll GetCollection()? - person j-u-s-t-i-n; 14.03.2012
comment
Не в js. Похоже, ваша проблема связана с маршрутизацией. Какую ошибку вы получаете от запроса ajax? Изменения в файле global.asax: RouteTable.Routes.Add(new ServiceRoute(, new WebServiceHostFactory(), typeof(Service))); - person j-u-s-t-i-n; 14.03.2012
comment
Джастин, я добавил обработку ошибок в свой вызов ajax: error: function (xhr, ajaxOptions, throwError) { alert(xhr.status); оповещение (выброшеноОшибка); xhr.status = 0 и throwError=''; моя проблема - номер порта, который я не знаю, где его инициализировать. Ваше решение не может работать, так как мой сервис находится в другом проекте и /getCollection не может быть найден. Спасибо, в любом случае. Кто-нибудь еще, кто уже сделал jquery для REST WCF? - person Frenchi In LA; 14.03.2012
comment
Если ваши проекты не находятся на разных портах, это будет работать. Ваш другой проект строится как отдельная dll? - person j-u-s-t-i-n; 14.03.2012

Хорошо, я нашел номер порта. Проверьте свойства проекта службы Alt + Enter, вкладка «Веб», в разделе «Серверы» установите флажок «Применить параметры сервера для всех пользователей» и «Использовать сервер разработки Visual Studio», «Автоназначение порта». Перед параметром «Конкретный порт» указан номер порта. Этот номер порта будет использоваться Visual Studio.

person Frenchi In LA    schedule 19.03.2012