Служба WCF с двоичными данными
Вопрос
У меня уникальная проблема, и я хотел бы иметь возможность обрабатывать входящий HTTP POST-запрос, содержащий произвольные двоичные данные.
В настоящее время я могу обработать эти данные, используя стандартный ASP.NET Обработчик страницы или в веб-службе ASP, но я хочу знать, возможно ли обрабатывать ВХОДЯЩИЕ двоичные данные в службе WCF?Могу ли я углубиться в стек обработки WCF, чтобы обойти обработку SOAP и обработать необработанное сообщение в моем собственном коде?
Я понимаю, что это нарушает публикацию 'contract' WCF (WSDL что угодно), но на самом деле меня это не волнует.
-Джефф
Решение 4
Потратив несколько недель на эту проблему, я получил практически окончательный ответ:
Можете ли вы заменить XML / SOAP пользовательской двоичной сериализацией для WCF?
Короткий ответ:НЕТ
Длинный ответ:да, но вам придется переписать почти все интерфейсы транспортного уровня, так что вы могли бы с таким же успехом просто создать пользовательский IHttpHandler и избежать WCF все вместе.
Microsoft, пытаясь следовать стандарту SOAP (а стандарт, на мой взгляд, отвечает за эту проблему), нарушает одно из простых правил программирования -> разделение обязанностей по уровням.WCF / SOAP может показаться элегантным многоуровневым протоколом и транспортом, но реальность такова, что между уровнями существуют сложные соединения.Это означает, что WCF является чрезвычайно сложным протоколом связи, который обеспечивает транспортировку, безопасность, надежность, публикацию, сериализацию и другие функции, которые на определенном уровне взаимозависимы.Если все, что вам нужно, - это транспортный канал, WCF / SOAP добавляет огромную сложность.
Я уверен, что мог бы начать громкие разглагольствования о SOAP yes / no, но я наконец понял, что WCF / SOAP - это не то, что мне нужно для моего приложения.
-Джефф
Другие советы
Рассмотрите возможность использования MTOM.MTOM - это механизм для передачи больших двоичных вложений с сообщениями SOAP в виде необработанных байтов, позволяющий передавать сообщения меньшего размера.Для получения подробной информации смотрите:
Вы можете использовать потоковую передачу MSDN
Насколько я знаю, вы можете настроить привязку службы:http://www.c-sharpcorner.com/UploadFile/pjthesedays/bindwcf05032009012251AM/bindwcf.aspx
Использование привязки NETTCPB