Я предполагаю, что вы говорите о _ 1_ HTTPServer. Я также предполагаю, что вы подключаете сервер к службе с помощью вызова _ 2_, используя поставщика услуг, поддерживающего HTTPServer.
Ключ находится в _ 3_:
Если параметр длины ответа больше нуля, это указывает точное количество байтов для отправки, и приложение должно отправить именно этот объем данных. Если параметр длины ответа равен нулю, то используется кодирование передачи по частям и может быть отправлен произвольный объем данных. Приложение завершает тело ответа, закрывая OutputStream.
Итак, пока обработчик передает положительное значение для responseLength
, используется Content-Length. Конечно, для этого он должен заранее знать, сколько данных он собирается отправить, чего вполне может не быть. Боюсь, это зависит от реализации привязки или нет. Я не верю, что это стандартизовано - действительно, я не верю, что WebServiceProvider / HTTPServer вообще стандартизирован.
Однако, даже если ваш провайдер отказывается сотрудничать, у вас есть выход: напишите Фильтр, который добавляет буферизацию, и добавить его в HttpContext, который вы используете для публикации службы. Я думаю, что для этого вам нужно будет написать реализацию HttpExchange, который буферизует записанные в него данные, передает их по цепочке фильтров, чтобы обработчик мог записать свой ответ, а затем, когда он вернется, напишите буферизованный контент, устанавливая responseLength
, когда он это делает.
person
Tom Anderson
schedule
02.08.2011