Существует ли встроенный способ определения размера ответа WCF? - PullRequest
1 голос
/ 29 апреля 2010

Прежде чем клиент получит полную полезную нагрузку веб-запроса, мы хотели бы сначала отправить ему измерение размера ответа, который он получит. Если ответ будет слишком большим, клиент представит пользователю сообщение с возможностью отменить операцию.

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

Кто-нибудь знает, есть ли у WCF какой-нибудь хитрый способ сделать это? Или есть какие-нибудь бесплатные сторонние инструменты для этого?

Спасибо.

1 Ответ

0 голосов
/ 29 апреля 2010

Я не думаю, что в WCF или .NET есть что-то «хитрое», чтобы действительно это сделать. Что вы передаете обратно клиенту? Экземпляр класса?

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

Проблема в том, что на сервере может потребоваться некоторое время, чтобы просто собрать / запросить, а затем на самом деле тоже «измерить». Кроме того, вам почти потребуется два вызова - один для «MeasureResult», который возвращает Int или Long или что-то еще, а затем второй вызов «GetResult» для фактического получения результатов. Таким образом, вы приложите все усилия, чтобы собрать сообщение дважды ...

У меня нет хорошего ответа для вас, но, возможно, вам просто нужно найти какой-то другой способ, позволяющий клиенту прервать вызов, если это займет слишком много времени. Или найдите способ быстрее определить показатель размера ответа (без получения всех деталей самого ответа).

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