IIS 7.5 および VS 2010 で実行される WCF サービスがあります。このサービスには、 Facebookとの間で GET および POST を実行するために、 Facebook C# SDK (バージョン 4.1、最新ではない) を内部的に使用するメソッドがいくつかあります。Facebook はまもなくを削除するのでoffline_access
、アクセス トークンの有効期限が切れた状況に対処する必要があります。
Graph API を使用して Facebook 情報を取得するために (コードを取得するため、およびアクセス トークンを取得するためのコードを取得した後に) 認証が実行される方法を理解しました (ここに示されているように)。
2 つの質問があります。
- サービス メソッドが呼び出され、DB から適切なユーザーのトークンを取得するときに、アクセス トークンの有効期限が切れているかどうかを知る方法はありますか? Facebook API 呼び出しが実行され、アクセス トークンの有効期限が切れると、次の例外がスローされること
を読みOAuthException
ました: . しかし、有効期限を検出するより良い方法はありますか? したくない
- Facebook API を呼び出す
- 例外を処理する
- アクセストークンを更新して最後に
- 新しいアクセス トークンを使用して最初の呼び出しを繰り返します。
- ユーザーのアクセストークンを透過的に更新(DBにも格納)し、引き続きサービスメソッドを処理することはできますか? このリソースでは、重要な (「アクセス トークンの更新」) 部分が欠落しています ([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 のリクエスト/コールバックから取得した新しいアクセス トークンをサービス メソッドが待機する方法はありますか?