Сжатие данных для служб данных 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
, применяется к вашей операции, которая устанавливает заголовки соответственно.