Глобальные переменные в сервисах WCF REST - PullRequest
1 голос
/ 30 августа 2010

Мое приложение работает следующим образом

[user]----username/password/domain----->[WCF service]

, затем я обращаюсь к серверу домена, чтобы увидеть, к какой фактической БД пользователь привязан, после получения я проверяю пользователя в его фактической БД (БД подомен)

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

, например, если пользователи вызывают операцию службы WCF:

Test()

Сначала вызывается процедура проверки (WCF UserNamePasswordValidator), которая проверяет пароль пользователя (который отправляется как часть заголовка для REST или как часть SOAP), а следующая вызываемая функция - этоПротестируйте, но к тому времени я не могу сказать домену пользователя (чтобы фактически обрабатывать запрос против этого домена ..)

Я не хочу менять подпись каждого домена на

Test(string domain)

Я не могу просто получить доступ к заголовкам, поскольку я предоставляю одни и те же методы как REST, так и как SOAP, и аутентификация для каждого из них различна .. (один с заголовками, как сAmazon S3 и более поздние версии используют стандарт SOAP)

, поэтому в основном я ищу глобальное хранилище для каждого вызова (я хочу избежать метода инициализации для каждого вызова)

спасибо.

РЕДАКТИРОВАТЬ: Может быть, я должен использовать ThreadStaticAttribute?это будет работать?

Ответы [ 2 ]

2 голосов
/ 30 августа 2010

Это не будет работать.Вы не можете ничего хранить в UserNamePasswordValidator.У него даже нет доступа к OperationContext, потому что он работает в другом потоке.

Способ сделать это - создать собственный инспектор сообщений и извлечь информацию из пользовательского заголовка сообщения в расширение пользовательского контекста, как упомянул Фрэнк.

1 голос
/ 30 августа 2010

WCF знает ток OperationContext.Вы можете написать свои собственные расширения для него.Вне зависимости от этой проблемы, я использовал ту же механику в этом руководстве NHibernate Session здесь , что также может работать в его концепции.Доступ к InstanceContext, но концепции похожи.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...