Сообщения в WCF читаются один раз.Это связано с тем, что они могут передаваться в потоковом режиме, и поэтому потоковые данные не будут магически повторно отправляться
Чтобы «обработать» сообщение более одного раза, необходимо скопировать его, и единственный способ скопировать его - использовать MessageBuffer каку вас есть подход 1. Обработка сообщения может быть просто проверкой тела на предмет зависимой от данных маршрутизации содержимого, но как только вы собираетесь коснуться тела, вы должны скопировать его, чтобы сообщение было успешно обработано остальной частьюИнфраструктура WCF
Обратите внимание, что если все, что вам нужно, это посмотреть на заголовки, вам не нужно копировать сообщение, так как заголовки всегда буферизуются - это только тело, которое может быть передано
как говорит @hyp, подход 2 вообще не копирует сообщение - он просто дает вам две ссылки на одно и то же сообщение - возможно, стоит перечитать кое-что о ссылочных типах и типах значений - вот статья , которая можетпомощь