У меня есть служба WCF, которая работает в IIS 7.5 и VS 2010. Эта служба имеет некоторые методы, которые используют Facebook С# SDK (версия 4.1, не последний), чтобы выполнить некоторые GET и POST из/в Facebook. Поскольку Facebook скоро удалить offline_access
, я должен обработать ситуацию, когда токен доступа истек.
Я понял, как выполняется аутентификация (чтобы получить код и после того, как код получил токен доступа), чтобы использовать Graph API для получения информации Facebook (как представлено здесь).
У меня есть два вопроса:
- Когда мой метод службы вызывается, и я извлекаю токен
соответствующий пользователь из моей БД, есть ли способ узнать, является ли токен доступа
истек или нет?
У меня читать, что при вызове API Facebook и истечении срока доступа маркер доступа генерируется следующее исключение:OAuthException
. Но есть ли лучший способ обнаружить истечение? Я не хочу, чтобы- Вызвать API Facebook
- Обработать исключение
- Замените токен доступа и, наконец,
- Повторите первоначальный вызов с новым токеном доступа.
- Возможно ли прозрачно обновить токен доступа пользователя (сохранить его также в БД) и продолжить обработку метода службы? В этот ресурс отсутствует важная часть ( "Обновить токен доступа" ) (объявлена как [TODO])
Я хотел бы получить следующую схему в реализации Сервисного метода:
sc = SocialNetworkAccountDao.GetByUser(user)
isExpired = call method to check if the sc.token is expired.
if (isExpired)
{
newToken = call method for getting new access token
sc.token = newToken;
SocialNetworkAccount.Update(sc);
}
Facebook = new Facebook (sc.token)
Facebook.Post( ..... )
--
Процесс связи с диалогом QAuth
является асинхронным (выполняется перенаправление), а связь с URL-адресом токена доступа для получения токена доступа выполняется синхронно.
Заключительный вопрос:
- Есть ли способ, по которому сервисный метод ждет нового токена доступа, мы извлекать из запроса/обратного вызова с помощью Facebook для того, чтобы продолжить позже с новым токеном доступа?