2015-12-09 1 views
1

У меня есть служба, требующая сеанса. Причина этого заключается в том, что клиент запускает сеанс, запрос службы к базе данных, если имя пользователя и пароль верны, и если это правильно, то служба разрешает использовать эту службу для этого сеанса.Какое рекомендуемое время жизни прокси-сервера в WCF?

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

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

Возможно, я ошибаюсь в том, что я проверяю учетные данные, чтобы разрешить или не использовать сеанс для использования службы.

Спасибо.

ответ

3

Если вы намерены аутентифицировать пользователя, вы можете использовать следующие возможности:
Установить учетные данные клиента для UserName. В этом случае перед выполнением любого вызова имя пользователя и пароль клиента проверяются на основе данных, хранящихся в базе данных. Вы определяете получение пользовательского класса от UsernamePasswordValidator, где вы запрашиваете БД, чтобы выяснить, разрешено ли вызывающему абоненту использовать услугу. Я отсылаю вас к этому post.

Я что прочитанные прокси будет закрыта после того, как вызов метода имеет закончил

Не прокси, но экземпляр должен быть уничтожен, и ответственность за это ReleaseInstanceMode свойство OperationBehavior. Вы не сможете воспользоваться таким решением, поскольку уничтожающий экземпляр не лишает пользователя доступа к сервису. Вместо этого можно создать другой экземпляр. Конечно ReleaseInstanceMode относится к ситуации, когда InstanceContextMode установлен в PerSession.