2009-12-04 2 views
0

У меня есть список объектов, которые мне нужно отправить через веб-службу. Список содержит около 37 000 объектов. Это приводит к приблизительно 125 МБ XML-файлу, если я сериализую его в XML..NET WebService Отправка большого файла XML

Я думаю, что по умолчанию веб-службы обмениваются данными через последовательный XML. Это заставляет меня поверить, что я действительно отправляю 125 МБ-файл каждый раз. В двоичном формате это будет всего около 5 МБ. Есть ли способ сделать вызов веб-службы в двоичном формате, чтобы избежать большой полосы пропускания?

+1

Каковы ваши возможности происхождения и назначения? Может ли каждый конец gzip и ungzip? – hova

+0

Webservice, скорее всего, не лучшее решение здесь, предоставить дополнительную информацию об потребителе услуг. –

+0

Я имею дело с консультантом, который ожидает данные в формате массива объектов: Object []. Это мешает мне каким-либо образом сжимать или изменять данные. Я, вероятно, могу заставить их изменить его, но я просто хочу убедиться, что нет способа заставить сериализовать веб-службу в двоичном формате. –

ответ

2

Можете ли вы использовать WCF для своего веб-сервиса? Если это так: поддержка WCF streaming large data через провод.

Если у вас есть шанс на сжатие данных на серверной стороне до 5 МБ в ZIP-архиве или что-то в этом роде, вы наверняка сможете передать это через своего клиента.

Вы бы что-то вроде этого, как ваш контракт WCF сервиса:

[ServiceContract(Namespace="http://yourservice.com/streaming/2009/12")] 
interface IYourStreamingService 
{ 
    [OperationContract] 
    Stream GetListOfObjects(int id); 
} 

Вы можете определить методы, которые либо принимают или возвращают данные как «поток», а затем клиент может открыть этот поток подобно FileStream или MemoryStream, и данные будут передаваться по проводам в кусках, поэтому вам не нужно будет выделять все данные в памяти перед отправкой его клиенту.

Marc

1
  • Вы можете выполнить сериализацию в двоичном массиве.
  • Затем переведите этот массив в строку.
  • Поместите эту строку в структуру и отправьте ее.
  • Затем с другой стороны преобразуйте массив байтовых строк обратно в обычный массив байтов.
  • Затем повторно сериализуйте его в интересующий вас объект.
Смежные вопросы