Я пытаюсь лучше понять процесс отправки WCF, в частности, влияние и влияние на различные точки расширяемости. На приведенных ниже веб-страницах показано, что WCF будет выполнять следующие действия в указанной последовательности, как только сообщение передается диспетчеру в стеке каналов.
- Инспектор сообщений
- Селектор операций
- Форматирование сообщений
- Инспектор параметров
- Операция Invoker.
Я пытаюсь найти некоторые варианты решения проблемы, которую я имею, и один из способов, о котором я думаю, - использовать комбинацию Message Inspector, Operation Selector, Message Formating и Operation Invoker. К сожалению, мое наблюдение, похоже, указывает, что последовательность выполнения выглядит следующим образом:
- Селектор операций
- Инспектор сообщений
- Операция Invoker (AllocateInputs())
- Форматирование сообщений
- Инспектор параметров
- Операция Invoker (Invoke())
Я могу понять небольшую разницу, когда вызываемый пользовательский метод AllocateInputs() вызывается перед форматированием сообщения, поскольку раздел форматирования сообщений по существу десериализует данное сообщение в набор аргументов метода, которые должны быть переданы в соответствующую операцию, и invoke AllocateInputs() определяет, сколько параметров ожидается.
Часть, которая меня бросает, - это инверсия последовательности между Message Inspector и Operation Selector. Мне кажется логичным для меня, когда Message Inspectors запускаются сначала, когда они действуют над сообщением, тогда как Operation Selector определяет, какая служебная операция предназначена для сообщения.
Вопросы:
- Это из-за разных версий или выпусков WCF?
- Это потому, что WCF фактически не указывает последовательность выполнения точек расширения?
Страницы справки:
Расширение WCF для поддержки пользовательских форматов данных - Zulfiqar weblog
Расширение WCF с пользовательскими настройками - Станция обслуживания MSDN Декабрь 2007
Точки перехвата потока сообщений - Блог пользователя Nicholas Allen Indigo
Примечание. Мои извинения за отсутствие ссылок, не могут быть более одного, так как я все еще ноб. =)