4

ASP.NET 4.0を利用したアプリがありますFacebook API。先週までは正常に動作していました。アプリケーションのアクセストークンを取得しようとすると

public static string GetWebResponse_HttpWebRequest(string url)
{
        HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest;
        request.Method = "GET";
        WebResponse webResponse;
        string response = "";

        webResponse = request.GetResponse();
        io.Stream stream = webResponse.GetResponseStream();
        io.StreamReader str = new io.StreamReader(stream);
        response = str.ReadToEnd();

        return response;
}

url: https://graph.facebook.com/oauth/access_token?client_id=117260348353246&client_secret=7b8734d7f36bf007d0d40bec728b57d9&code=AQD5xcdQiE2Ab9RpmexVUdP-i_2Nm5V52SVhxBVXkeq7WlJoOQ-xB4wYgbs3yeejLFHmR-lKLj0cwg6FeMWKGvHwT4akAlN7uMLxqu9YaqFumup3SPkuTjuQYETTCqQ1n2MAQjzexqiv8WV3UEcO4Qy5lObQ13qdYlKoYdKUacT42oJ0vhVuopH2WNkk3QRCq6DeAl02YU-sD8X8PTZgu52e&redirect_uri=http://www.opinere.com

エラーがあります:

{"error":{"message":"Code was invalid or expired. The session was invalidated explicitly using an API call.","type":"OAuthException","code":100}}

私のローカル マシンでは、アプリケーションは正しく動作します。場合Windows Azureによっては機能しますが、ほとんどの場合機能しません。
なにが問題ですか?

更新: 2 つの要求があります: 1)エラーなし 2) 1 分でエラーあり- Code2 (アクセス トークン) が空です。違いはヘッダー "HTTP_REFERER" にあるようです。2 番目の要求では不在です。

4

1 に答える 1

2

何が起こっているのか説明させてください。この問題は、複数のWebロールにあります。

AzureでのWebの役割は何ですか?

WebロールはVHDです。つまり、データ/Webサイトがコピーされた状態で仮想的に実行されているシステムイメージです。割り当て、初期化、コピーするのはファブリックの仕事です。

Webの役割はどのように連携しますか?

ロードバランサーは、ロール間で着信トラフィックのバランスを均等に取ります。つまり、あるWebロールで作成されたセッションは、別のWebロールでは無効になります。セッションだけでなく、フォーム認証でも機能しません。

なんで?

セッション/フォーム認証はmachineKeyを使用して暗号化/ハッシュするためです。また、各Webロール/仮想マシンには異なるmachineKeyがあります。これで、なぜそれが時々機能し、時には機能しないのかがわかります。リクエストがセッションを作成したのと同じロールVMに到達すると機能し、そうでない場合は機能しません。一般に、作成された各セッションのロール時間の1:no(約)でのみ機能します。

解決?

Webファームでサイトをホストしているのと同じです。したがって、WebサイトをWebファームで実行する方法を検討する必要があります。または、1つのWebロールのみを使用できます。2つの小さなVM /ロールを使用している場合は、代わりに1つの大きなVMのみを使用できますが、すべてアプリケーションの動作に依存するため、最初に最適に機能するもの、複数のVM、または大きなVM。また、単一のVMでは信頼性が失われるため、役割が低下するとWebサイトもダウンします。

ここでテーブルストレージを使用したソリューションを探して くださいhttp://www.intertech.com/Blog/Post/Session-State-in-Windows-Azure.aspx

編集 トークンをセッションに保存する代わりに、Cookieを使用しますが、それでも根本的な問題を解決しておらず、コアの問題について何もしなかった場合、多くの問題が発生します。

于 2012-11-27T14:30:55.330 に答える