Как получить Непримитивные данные в WebMethod?

1

Я пытаюсь передать массив байтов в мой WebMethod через JavaScript. Проблема в том, что мой WebMethod возвращается с сообщением "тестовая форма доступна только для примитивных методов в качестве параметров".

Когда я изменяю тип данных на строку или любые другие примитивные переменные, WebMethod принимает это.

Я преобразовываю объект в байт [], называемый msgpackEnvio, используя MessagePack (само преобразование происходит хорошо), а затем отправляется в WebService.

Здесь мой запрос к WebService с использованием jquery

$.ajax({
                    beforeSend: function (request) {
                        request.setRequestHeader("Content-Type", "application/json");
                    },
                    processData: false,
                    dataType: "json",
                    url: url,
                    data: msgpackEnvio,
                    type: "POST",
                    error: function (data) {
                        $('#upload-load').hide();
                        $('.bt-enviar-excel').removeAttr('disabled', 'disabled');
                        var msg = document.getElementsByClassName('msg')[0];
                        msg.style.color = 'red';
                        msg.innerHTML = 'Erro interno servidor!';
                    },
                    success: //some code

На самом деле, код выше не имеет значения, моя проблема заключается в webService и как заставить его получать массив или, возможно, объект.

И вот мой WebMethod, который должен иметь возможность получить байт []

 [WebMethod]
public string TestMessagePack(byte[] name)
{        
    //my code

    return "Finish";
}
Теги:
web-services
webmethod

1 ответ

0

Вы можете использовать кодировку и декодирование base64 для отправки массивов байтов в виде строк. Что-нибудь еще, и вы можете вместо этого использовать пост-запросы и сериализацию/десериализацию JSON. Там не будет общий размер, соответствующий всем преобразованиям между сложными объектами С# и объектами javascript, поэтому разрешены только примитивные параметры, поэтому для непримитивных вещей вам потребуется слой перевода. Это обычно означает некоторую форму сериализации строк и десериализации.

  • 0
    Я попробовал это, но проблема, которую я хочу решить, как раз эта. Когда я читаю некоторые объекты, мой json становится настолько большим, что соединение с WebService занимает много времени, и даже в некоторых случаях возникает ошибка соединения во времени. Мне действительно нужно изменить метод WebService, чтобы получить не примитив
  • 0
    Откуда javascript узнает, как создать не примитивный объект, понятный C #? Сложные объекты будут зависеть от их языка и среды с точки зрения того, как они на самом деле выглядят под капотом, поэтому для преодоления этого пробела сериализация вступает в игру. Сложные объекты так или иначе должны быть сериализованы в строку (примитивный тип, с которым оба уровня знают, как обращаться) для отправки и десериализации из строки обратно в сложный объект для получения. JSON / XML / etc и base64 ваши друзья здесь.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню