WCF REST. Возможно ли протоколировать запросы, полученные от клиента, в базу данных?

#c# #wcf #rest

#c# #wcf #rest

Вопрос:

Я новичок в WCF. У меня есть служба WCF REST, которая использует ServiceAuthorizationManager. Требуется протоколировать запрос, полученный от клиентов, в таблицу в БД. Где это должно произойти, я имею в виду в AuthorizationManager, который реализует ServiceAuthorizationManager? и как собрать всю информацию, такую как IP-адрес клиента, заголовки авторизации, переданные клиентом, чтобы я мог заполнить объект и вызвать db в Application_EndRequest класса Global.asax.

Пожалуйста, посоветуйте.

Спасибо, Раджу

Комментарии:

1. вы размещаете службу в IIS?

Ответ №1:

Рассмотрите возможность добавления инспектора сообщений в вашу службу. Я нашел эту ссылку, которая может быть полезной: Инспектор сообщений WCF REST

В AfterReceiveRequest методе вы можете извлекать информацию заголовка и т.д. Из заголовка запроса.

Реализуйте свою логику в BeforeSendReply вместо в Application_EndRequest .

Комментарии:

1. Я не нахожу, что AfterReceiveRequest является адекватным. Я получаю сообщение об ошибке при разборе ошибок в возвращенном сообщении, и это происходит до вызова AfterReceiveRequest, что делает это бесполезным для фактического устранения неполадок.

Ответ №2:

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

Если вы решите использовать маршрут ServiceAuthorizationManager, ознакомьтесь с этой статьей MSDN об использовании этого класса. Показано, как переопределить метод CheckAccessCore и извлечь заголовки сообщений и т.д. Именно здесь вы могли бы реализовать вызов для регистрации запроса, если авторизация прошла успешно.