Я хочу расширить существующие сервисы и добавить авторизацию для каждого звонка. Проблема в том, что я не знаю, как это сделать наилучшим образом. Что мне нужно сделать, это отправить имя модуля, вызывающего службу WCF. Я уже отправил имя пользователя и пароль для сервиса, и теперь мне нужно дополнить его названием модуля, вызывающего сервис. Это потому, что мы можем позволить пользователю открывать модуль и отображать данные из другого модуля, но не из третьего.
Если бы мы использовали контракты на сообщения, я бы просто добавил для этого MessageHeader и установил этот заголовок при создании запроса. К сожалению, это не вариант с DataContracts, поэтому я рассматривал следующие две альтернативы.
Добавление DataMember в базовый класс с Order = 1000 или что-то в этом роде. Я не знаю, что произойдет, если мы добавим еще один DataMember до этого, хотя?
Создайте свойство для имени модуля и установите вместо него заголовок в транспорте. Не очень люблю этот, хотя. Это довольно абстрактно, и за ним трудно следовать.
Какой из них наименее злой или у вас есть лучшее предложение?
РЕДАКТ. 1: Проблема не в том, как отправить заголовок службе, а в том, как отправить заголовок с определенным значением на сервер. В инспекторе сообщений я могу создавать только общие экземпляры с message.GetBody<DataContract>();
, это означает, что я должен знать тип, который я не знаю, как.
РЕДАКТИРОВАТЬ 2: Проблема заключается в том, что в нашем приложении мы хотим ограничить доступ к вызову на основе того, откуда был сделан вызов, поэтому мне нужно передать эту информацию. Допустим, я выполняю вызов MyService из FindUserModule, затем мне нужно добавить идентификатор этого модуля в заголовок, чтобы AuthorizationManager мог проверить, действительно ли этот пользователь должен быть авторизован. Это связано с тем, что сервисные вызовы используются из многих модулей.