Перехват сообщений в клиенте WCF - PullRequest
5 голосов
/ 02 августа 2009

Кто-нибудь имел опыт работы с расширениями веб-служб? Я потратил время, пытаясь сделать расширение веб-службы из примеров MS.

У меня есть клиент веб-службы .net 3.5, созданный путем добавления ссылки на WSDL через VS IDE "Проект> Добавить ссылку на службу". Это построил мой клиент веб-службы, и все работает хорошо.

Мне нужно перехватить тело запроса и ответа для моего клиента веб-службы. Я нашел много ссылок на расширения веб-служб, но у меня атака усталых, и я просто не могу запустить мои расширения.

Я использовал отсюда пример MS "Как реализовать расширение SOAP" (http://msdn.microsoft.com/en-us/library/7w06t139.aspx), который создает регистратор для потоков запросов / ответов.

В соответствующей статье MS «Модификация сообщений мыла» (http://msdn.microsoft.com/en-us/library/esw638yk(VS.85).aspx) показано, как включить расширение SOAP для веб-клиента:

Реализация расширения SOAP

Существует два способа запустить расширение SOAP на клиентском или серверном приложении. Во-первых, вы можете настроить приложение для запуска расширения. Чтобы настроить расширение SOAP для всех веб-методов во всех веб-службах, особенно в vroot, отредактируйте раздел <soapExtensionTypes> Element в файле Web.config. В следующем коде показано, что значение атрибута типа должно быть в одной строке и содержать полное имя расширения, а также маркер версии, культуры и открытого ключа подписанной сборки.










Я скомпилировал traceextension в его собственную библиотеку классов и сослался на нее в файле web.config проекта веб-службы следующим образом:

Нет радости. Ничего не зарегистрировано, никакие контрольные точки не достигнуты.

Затем я удалил указанный класс и поместил исходный код в проект веб-службы.

Я попытался добавить ссылку на него следующим образом (мое пространство имен ServcieTest001):

Я использовал следующую ветку в качестве руководства для включения расширения "получение-сырых-мыльных-данных-из-веб-ссылки-клиента-работающего в asp-net" (/238776/poluchenie-dannyh-raw-myla-iz-veb-etalonnogo-klienta-rabotayschego-na-asp-net).

Все еще нет радости. Затем я скопировал код из вышеупомянутого потока и все еще не могу запустить расширение при выполнении запроса SOAP.

Может кто-нибудь указать мне на работающий загружаемый демонстрационный проект расширения веб-службы, чтобы я мог разобрать его и выяснить, чего мне не хватает?

Ответы [ 3 ]

12 голосов
/ 02 августа 2009

Джон прав, вы можете перехватывать сообщения на клиенте, используя пользовательское поведение клиента, которое реализует IClientMessageInspector. См. Как: проверить или изменить сообщения на клиенте в MSDN.

Единственная хитрость в том, что если вы планируете изменить сообщение body , вам сначала нужно будет создать копию исходного сообщения. См. Использование класса сообщений для получения подробной информации.

0 голосов
/ 02 августа 2009

Да, я слишком устал.

Я думаю, Расширения веб-службы работают с "веб-ссылками" (.net 2), а не с "ссылками на службы" (.net 3).

Итак, я думаю изменить свой вопрос - как мне перехватить запрос и ответ для .net 3 «Service reference», подключенного к устаревшей веб-службе?

0 голосов
/ 02 августа 2009

Скорее всего, вы хотите немного отдохнуть.

Вы никогда не хотите использовать WSE. WSE устарела.

Вы не хотите использовать веб-службы ASMX - Microsoft теперь считает их устаревшей технологией и не будет исправлять ошибки. Кстати, WSE основан на ASMX, так что это делает?


Вы хотите работать только с Windows Communication Foundation. Центр разработки WCF на MSDN находится по адресу http://msdn.microsoft.com/wcf/.

Развлекайся и держись подальше от мерзких, древних, устаревших вещей.

...