Как передать большое количество данных в веб-сервис - PullRequest
3 голосов
/ 25 июня 2009

Я создаю приложение клиент-сервер (c #), которое использует веб-сервисы для синхронизации данных.

По сути, я передаю XML-код DataSet туда и обратно. Но в зависимости от различных параметров набор данных может быть довольно большим. Я сжимаю XML с помощью Gzip и хочу передать его на веб-сервер и получить полученный сжатый XML обратно.

Как лучше всего передавать потенциально большие куски данных туда и обратно?

Разъяснение: наверное, я спрашиваю, какой формат лучше всего передавать данные. JSON, SOAP, обычный POST (я не очень знаком с веб-сервисами, поэтому уверен, что есть еще кое-что, о чем я не думаю).

Ответы [ 6 ]

4 голосов
/ 25 июня 2009

Лучше всего зависит от многих факторов. Если под лучшим вы подразумеваете наиболее производительный, вот несколько моментов, на которые следует обратить внимание:

  • XML совсем не лучший способ
  • Двоичная сериализация гораздо эффективнее.
  • Однако у вас может не быть этой опции, если вам нужно позаботиться о совместимости. В этом случае вы можете рассмотреть возможность использования плоского файла или формата с разделителями.
  • Если ни один из них не выполним, тогда вы можете рассмотреть возможность отправки измененных данных вместо всех данных.
  • Если это не вариант, то сжатие XML - это ... правильное решение.

Я бы использовал XML в качестве крайней меры, поскольку в XML включено много ненужных метаданных, которые легко увеличат размер вашей полезной нагрузки более чем в 5 раз.

1 голос
/ 25 июня 2009

Что вы, вероятно, хотите исследовать, это использовать MTOM . Это позволяет вам отправлять двоичные файлы SOAP по частям. Это здорово, потому что фрагментация данных в сочетании с пользовательским интерфейсом AJAX позволит вам представить индикатор выполнения пользователю, который его загружает.

Здесь является примером использования MTOM для отправки / получения данных в виде фрагментов. Надеюсь, это поможет.

0 голосов
/ 25 июня 2009

Для веб-сервисов у вас есть несколько концепций и возможностей, которые вы можете рассмотреть.

Вам нужно несколько клиентов, управляющих одним и тем же набором данных? Одновременно с этим?

Есть ли у вас отключенный набор, которым он управляется на обоих концах, или только один управляет другими представлениями / магазинами / отчетами?

Вы просто используете клиент для использования в качестве интерфейса к набору данных, и если да, имеет ли смысл использовать другой интерфейс (веб) для независимого управления различными частями набора данных в качестве приложения на основе веб-интерфейса?

Вносите ли вы постепенные изменения во взаимодействие типа транзакции? (Один конец отправляет большой набор данных клиенту, и транзакционные изменения возвращаются на основании этого?)

Трудно рекомендовать конкретно, не задумываясь о том, можете ли вы / или как можно проанализировать набор данных для более оптимального управления или узнать больше о специфике здесь.

Если вы ДОЛЖНЫ отправить крупный объект данных, то просто становится вопросом о том, какой метод вы хотите использовать для своего конвейера, просто и выгрузите / загрузите, и вы соответствующим образом управляете конечными точками.

Для некоторых случайных мыслей:

Если вы хотите манипулировать данными в DOM, рассмотрите JSON, который вполне совместим с JavaScript.

Если вы хотите манипулировать набором данных XML, вы можете поместить zip или другое сжатие, если вам нужно передать весь набор данных, просто подключите его на каждом конце.

0 голосов
/ 25 июня 2009

Если все, что вам нужно, это применить сжатие gzip к вашим XML-данным, вы можете рассмотреть возможность включения прозрачного сжатия gzip на транспортном уровне http (Accept-encoding: gzip, Content-Encoding: gzip) и позволить iis его обработать. * см http://weblogs.asp.net/owscott/archive/2004/01/12/IIS-Compression-in-IIS6.0.aspx#58745

0 голосов
/ 25 июня 2009

Вы можете попробовать сжать файл и отправить его в двоичном виде через веб-сервис. Кроме того, не забудьте изменить ограничения на загрузку.

как отправить двоичные данные через веб-сервис: http://support.microsoft.com/kb/318425

0 голосов
/ 25 июня 2009

Если вы используете WCF для своих веб-сервисов, вы можете использовать MTOM для отправки данных в виде двоичного вложения. См:

Каков наилучший способ отправки больших данных из службы WCF Клиенту?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...