Веб-сервисы, такие как созданные WCF, часто лучше всего использовать без сохранения состояния, поэтому каждый вызов веб-сервиса начинается заново. Это упрощает код сервера, так как нет необходимости иметь «сеанс», который напоминает о состоянии клиента. Это также упрощает клиентский код, так как нет необходимости хранить билеты, куки-файлы или другие программы, которые предполагают что-то о состоянии сервера.
Создание двух служб описанным способом вводит состояние. Клиент либо «аутентифицирован», либо «не аутентифицирован», и MyDataService.svc должен выяснить, какой именно.
Как оказалось, WCF хорошо работает, когда поставщик членства используется для аутентификации каждого вызова службы. Таким образом, в приведенном примере вы хотели бы добавить узлы проверки подлинности поставщика членства в конфигурацию службы для MyDataService и вообще не иметь отдельной службы проверки подлинности.
Подробнее см. В статье MSDN здесь .
[Что мне очень нравится в этом, потому что я ленивый, так это то, что это полностью декларативно. Я просто разбрасываю правильные записи конфигурации для моего MembershipProvider в app.config для приложения и! бинго! все звонки на каждый контракт в услуге аутентифицируются.]
Справедливо отметить, что это не будет особенно быстрым. Если вы используете SQL Server для своей базы данных аутентификации, у вас будет по крайней мере один, возможно, два вызова хранимых процедур на вызов службы. Во многих случаях (особенно для HTTP-привязок) издержки самого вызова службы будут больше; если нет, рассмотрите возможность внедрения собственной реализации поставщика членства, который кэширует запросы на аутентификацию.
Одна вещь, которую не не дает, - это возможность предоставить возможность входа в систему. Для этого вы можете либо предоставить (аутентифицированный!) Контракт на обслуживание, который ничего не делает (кроме как выдавать ошибку, если аутентификация не пройдена), либо вы можете использовать сервис провайдера членства, как описано в исходной статье.