• Привет, Гость!
  • Войти
  • Регистрация
  • Записи
  • Форумы
  • Люди
  • Файлы
  • Работа
  • Технологии

Передать данные в веб-сервис и обработать их там.

Все форумы  Поиск  Правила  Помощь 
 Активные темы  Темы без ответов
Привет, гость! Войти
Форумы GotDotNet.Ru » ASP.NET WebForms » Передать данные в веб-сервис и обработать их там.
Страницы: 1
RSS
Передать данные в веб-сервис и обработать их там., XML, JSON, ну хоть как нибудь :).
Samous Prime
Сообщений: 130 Регистрация: 25.02.2008
#1
09.02.2010 16:06
Мне нужно передать веб-сервису пачку данных, допустим набор айдишников элементов и кол-во этих элементов, например в XML:
<element>
    <id>carrot</id>
    <count>5</count>
</element>
<element>
    <id>parrot</id>
    <count>3</count>
</element>
. Использовать необходимо JQuery:
function ExecuteService(params, url, callbackSuccess, callbackError) {
            $.ajax({
                type: "POST",
                url: url,
                contentType: "application/json; charset=utf-8",
                dataType: "xml", //или JSON
                data: params,
                success: callbackSuccess,
                error: callbackError
            });
        }
. Как должен выглядеть этот XML (или params, который я отправляю) для отправки веб-методу, и как должен выглядеть сам веб-метод, который примет этот XML или JSON ? Сейчас получается отправлять и принимать только строку вот так:
function ExecuteService(params, url, callbackSuccess, callbackError) {
            $.ajax({
                type: "POST",
                url: url,
                contentType: "application/json; charset=utf-8",
                dataType: "json",
                data: params, //Здесь например вот это: "{'codes':'sometext,someText2'}"    
                success: callbackSuccess,
                error: callbackError
            });
        }
public static string CheckOrders(string codes)
    {
    ...
    }
. Подскажите пожалуйста.
You are not special. You are not a beautiful or unique snowflake. You are the same decaying organic matter as everything else.
 
 
Basta-D
Сообщений: 125 Регистрация: 25.10.2007
#2
10.02.2010 8:24
А чем вам такая строка не подходит к передаче? вопрос не очень понятен, поясните более конкретно.
 
 
Samous Prime
Сообщений: 130 Регистрация: 25.02.2008
#3
10.02.2010 9:20
Неподходит тем, что если я расширяю данные, то в случае с JSON следующая строка при отправке вызывает ошибку (parse error)
{"codes":[
      {
        "firm":"BMW",
        "model":"X5",
        "year":2007,
        "price":99000
      },
      {
        "firm":"Audi",
        "model":"A6",
        "year":2008,
        "price":78000
      },
      {
        "firm":"Volkswagen",
        "model":"Touareg 7L",
        "year":2006,
        "price":45000
      }
    ]
  }
.
You are not special. You are not a beautiful or unique snowflake. You are the same decaying organic matter as everything else.
 
 
Basta-D
Сообщений: 125 Регистрация: 25.10.2007
#4
10.02.2010 16:44
Ну и правильно ругается. вы же передаете не строку, а массив. А веб сервис ждет от вас строку. передавай строку или принимайте массив.
 
 
Samous Prime
Сообщений: 130 Регистрация: 25.02.2008
#5
10.02.2010 20:07
Ну хорошо, а каким должен быть метод, чтобы принять такой массив ? А как быть в случае с XML ?
You are not special. You are not a beautiful or unique snowflake. You are the same decaying organic matter as everything else.
 
 
Basta-D
Сообщений: 125 Регистрация: 25.10.2007
#6
11.02.2010 9:17
Ну xml это обычная строка определенного формата, грубо говоря. Можно передавать и в такой метод. Попробуйте принимать в методе массив строк.
 
 
SamousPrime
Сообщений: 7 Регистрация: 21.08.2009
#7
11.02.2010 9:47
Я пробовал, не работает ни так:
public static string CheckOrders(string[] codes)
    {
    ...
    }
, ни так:
public static string CheckOrders(params string[] codes)
    {
    ...
    }
. Тут неважно, передаю ли я JSON или строку XML, по брейкпоинту в веб-метод не заходит все равно, т.е. либо параметры метода неверные, либо его тип, а в javascript выскакивает parseerror. Придумал извращенский способ:
"{'codes':'<message><from>Russia</from><with>with love</with></message>'}"
, а на сервере уже обрабатываю как XML, но как-то это "слишком".
 
 
Magic_Max
Сообщений: 541 Регистрация: 18.09.2003
#8
11.02.2010 16:33
Привет!

Вот серверный код (часть):
    [WebMethod]
    public XmlNode GetChildObjectsPaged(string id, int pageNum, bool isCity)
    {
     // какая то логика
     XElement root = new XElement("root");
     // опять какая то логика
     root.Add(new XAttribute("amount", cityList.Count));
     root.Add(new XElement("city", new XAttribute("id", "78"), new XAttribute("name", "Saint Petersburg")));
     root.Add(new XElement("city", new XAttribute("id", "77"), new XAttribute("name", "Moscow")));
     // root.GetXmlNode() - это самописный extension method - не ищите его
     return root.GetXmlNode();
    }



В брауpере - javascript
function showAirportsOrCities(pageNum, showCity) {
    $.blockUI({ message: '<h1 style="padding:10px;">' + 'Подождите - идет запрос информации' + '</h1><img style="padding-bottom:1em;" src="' + loadingAnimationGif + '" />' });

$.ajax({
        type: "GET",
        url: "Controls/LocationResolver.asmx/GetChildObjectsPaged",
        data: "id=" + id + '&pageNum=' + pageNum + '&isCity=' + showCity.toString(),
        cache: false,
        dataType: "xml",
        async: true,
        error: function(msg, textStatus) {
            $.unblockUI();
            alert('К сожалению, в процессе запроса информации, произошла ошибка: ' + msg.status + ' - ' + msg.statusText);
        },
        success: function(msg, textStatus) {
            var counter = 0;
            $(msg).find("city").each(function() {
               // тут перебираете каждый элемент "city" вернувшийся к вам от сервера
            });
            $.unblockUI();
        }
    });
}



также рекомендую использовать плагин к jQuery blockUI
Некоторые куски кода выкинуты за ненадобностью, но в целом работать должно.
Успехов! Что Почем.RU-справочная система по товарам и услугам, бесплатные объявления
 
 
Magic_Max
Сообщений: 541 Регистрация: 18.09.2003
#9
11.02.2010 16:37
Кстати...

Насколько я помню cо связкой JSON + ASP.NET web-service были какие то траблы - кажется со стороны jQuery - кажется он(о/а) неправильно header формирует при отправке запроса на сервер, изза чего ASP.NET не понимает что от него хотят :) Или что то в этом роде. Короче в свое время от использования связки JSON + ASP.NET web-service я отказался и использую XML + ASP.NET web-service. Возможно это пофикшено - но я тогда не нашел способа заставить работать в таком режиме...
Успехов! Что Почем.RU-справочная система по товарам и услугам, бесплатные объявления
 
 
Samous Prime
Сообщений: 130 Регистрация: 25.02.2008
#10
11.02.2010 20:09
Спасибо за код и за комментарии. Но в примере по сути дела передается/принимается лишь три параметра, а если их количество не известно ?
You are not special. You are not a beautiful or unique snowflake. You are the same decaying organic matter as everything else.
 
 
Magic_Max
Сообщений: 541 Регистрация: 18.09.2003
#11
12.02.2010 12:53
сам в моём примене не пробовал, но я бы на сервере попробовать сделать входным параметром например массив строк. а потом поискал бы как этот массив передать Javascript'ом из браузера, а когда нашел бы этот способ написал бы его в этой теме (думаю кому то будет интересно - минимум - мне) и заимплиментил бы в своем коде :) ну и выпил бы пивка (шампанского/водки/ваш_вариант) за победу! :)))

альтернатива - передавать строку, разделенную например значками ";" - что то типа "имя0=значение0;имя1=значение1" и т.д. Кстати ИМХО этот вариант проще...
Успехов! Что Почем.RU-справочная система по товарам и услугам, бесплатные объявления
 
 
Samous Prime
Сообщений: 130 Регистрация: 25.02.2008
#12
12.02.2010 14:09
Magic_Max, немного внимательнее :), я делал входным параметром массив строк (см. выше), но как передать его ява-скриптом так и не нашел, собственно в этом и был изначальный вопрос. Насчет строки вида "имя0=значение0;имя1=значение1" - много возни потом по обработке, с моим способом проще, имхо.
You are not special. You are not a beautiful or unique snowflake. You are the same decaying organic matter as everything else.
 
 
Magic_Max
Сообщений: 541 Регистрация: 18.09.2003
#13
12.02.2010 17:20
Куда уж внимательней :)))

к тому же возни при обработке - это не совсем так - вот например простейшее решение для серверной части (может не компилиться - пишу прямо в форуме - допустим на сервере в параметр функции allData мы пишем "имя0=значение0;имя1=значение1"):

var result = from pair in allData.Split(';')
select pair.Split('=');

а потом в foreach'e все это дело обрабатываем! Не забудьте написать using System.Linq;
Успехов! Что Почем.RU-справочная система по товарам и услугам, бесплатные объявления
 
 
 
Страницы: 1
Форумы GotDotNet.Ru » ASP.NET WebForms » Передать данные в веб-сервис и обработать их там.
О сайте   Свяжитесь с нами   Конфиденциальность   Версия для печати
Работает на 1С-Битрикс: Управление сайтом ASP.NET  |  Хостинг на Parking.Ru