Сжатие данных для служб данных ADO.NET

У меня есть служба данных ADO.NET, предоставляемая приложением.NET (не IIS), которое используется клиентским приложением.NET. Некоторые вызовы этой службы данных возвращают большие объемы данных.

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

2 ответа

Решение

Я предполагаю, что вы используете хостинг WCF в вашем.NET-приложении? Если это так, вам нужно будет написать несколько пользовательских MessageEncoder реализация, потому что WCF не обеспечивает это из коробки. К счастью, в SDK есть образец, который вы можете использовать.

Я на самом деле только что понял, что это только первый шаг в зависимости от того, является ли ваш клиент также WCF? Хотя это будет кодировать сообщение, для этого потребуется, чтобы ваш клиент использовал аналогично настроенный декодер, поскольку эта реализация не будет устанавливать заголовки HTTP, необходимые для оповещения о том, что кодирование произошло "чистому" HTTP-клиенту. Так что, если это не клиент WCF на другой стороне, в дополнение к кодированию самого сообщения, вам нужно будет использовать WebOperationContext применять соответствующие Content-Encoding: gzip заголовок. К сожалению, вы не можете сделать это в течение MessageEncoder сама реализация, потому что это слишком поздно в процессе, потому что к тому времени MessageEncoder предлагается записать содержимое сообщения, фрейм сообщения, в данном случае HTTP-заголовки, уже записан. Таким образом, вам также потребуется дополнительное поведение, в форме IOperationBehavior, применяется к вашей операции, которая устанавливает заголовки соответственно.

Вы можете использовать GZipStream для сжатия и распаковки.

Другие вопросы по тегам