Получение XML-запроса от ClientBase<T>
В настоящее время я использую ClientBase для доступа к веб-сервису. Это работает правильно, но мне нужно зарегистрировать запрос XML, который отправляется в службу. Я вижу, что есть способы сделать это, используя слушателей и другие подобные методы, но мне нужно получить доступ к этому XML-запросу в методе, из которого он отправляется, в моей базе кода. Есть ли способ, которым это поддерживается?
2 ответа
"XML" создается (сериализуется) только после того, как поток управления покидает ваш метод и вводит код WCF, который фактически выполняет вызов. Так что, если бы вы теоретически могли получить его из своего кода, вы бы получили его "после" фактического вызова. Это также причина, почему предполагаемый способ сделать это - реализовать / зарегистрировать IClientMessageInspector.
Единственная другая вещь, которая включает в себя некоторый ненужный ручной труд, - это вручную сериализовать аргументы, которые вы передаете вызову WCF, используя NetDataContractSerializer или DataContractSerializer. Имейте в виду, что это даст вам только полезную нагрузку, а не полное сообщение (включая заголовки и т. Д.).
Я бы действительно пошел по пути, который предлагается для этого (см. Ссылку выше).
Вы можете попробовать немного программирования АОП. Если вы используете Unity для DI, вы можете попробовать Unity только с Interception или Interception, используя класс Intercept.