2016-12-22 10 views
3

アプリケーションでログインしようとすると大きなパフォーマンスの問題が発生します。このアプリケーションはAzureでホストされているWebアプリケーションです。私はフロントエンドに反応するjsを使用します。OWINログイン遅いパフォーマンス> 30秒

私のSimpleAuthorizationProviderでは、ユーザーを取得し、ClaimsIdentityプロパティに要求を追加しています。私はそれをローカルにデバッグする場合、私は遅いパフォーマンスの問題は、初めて私がログインするが、次回のログインは、インスタントアクセスですログインします。私がAzureのテスト環境にアップロードするとき、問題はすべてリクエストされます。

私は、WebアプリケーションのAzureの "Always on"プロパティを有効にしました。私は、要求をタイムアウトしていると多くの時間を要することは、それだけでユーザーを認証するために、私のテスト環境で15のクローネを取るSimpleAuthorizationprovider

context.Validated(ticket); 

のコードのこの作品です。私のフロントエンドにも若干の遅延があります。私のフロントエンドでは、Web APIにリクエストするためにスーパーエージェントを使用しています。

は、ここに私のスタートアップクラスで私の設定です:

public void Configuration(IAppBuilder app) 
    { 
     app.UseCors(CorsOptions.AllowAll); 

     ConfigureOAuth(app); 
     var physicalFileSystem = new PhysicalFileSystem(@"./Html"); 
     var options = new FileServerOptions 
     { 
      EnableDefaultFiles = true, 
      FileSystem = physicalFileSystem, 
      StaticFileOptions = 
      { 
       FileSystem = physicalFileSystem, 
       ServeUnknownFileTypes = true 
      }, 
      DefaultFilesOptions = {DefaultFileNames = new[] {"Startup.html"}} 
     }; 
     app.UseFileServer(options); 

     // Get your HttpConfiguration. 
     var config = GetInjectionConfiguration(); 
     config.MessageHandlers.Add(new QueryStringBearerToken()); 

     WebApiConfig.Register(config); 

     // Setup WebApi 
     app.UseWebApi(config); 
     SetupWebApi(config); 

     Application_Start(config); 
     config.EnsureInitialized(); 
    } 

    public void ConfigureOAuth(IAppBuilder app) 
    { 
     var oAuthServerOptions = new OAuthAuthorizationServerOptions 
     { 
      TokenEndpointPath = new PathString("/api/token"), 
      AuthorizeEndpointPath = new PathString("/Login"), 
      AccessTokenExpireTimeSpan = TimeSpan.FromMinutes(120), 
      Provider = new SimpleAuthorizationServerProvider(), 
      RefreshTokenProvider = new ApplicationRefreshTokenProvider(), 
      AllowInsecureHttp = true, 

     }; 

     var oAuthBearerOptions = new OAuthBearerAuthenticationOptions 
     { 
      Provider = new QueryStringOAuthBearerProvider(), 
      AccessTokenProvider = new AuthenticationTokenProvider(), 
     }; 

     app.UseOAuthBearerAuthentication(oAuthBearerOptions); 
     app.UseOAuthAuthorizationServer(oAuthServerOptions); 
    } 

EDIT:

私は今context.validated(チケット)の問題ではないと言うことができます。 Azureでアプリケーションの洞察を結び、そこからさらに有用な情報を得ることができるかどうかを確認しました。私の推測では依然としてリクエストがヒットする前にAPIプロセスが "ウォームアップ"されておらず、プロセスが毎回向上する必要があるという結果に終わりました。私はそれをローカルでデバッグするとき、私のトークンエンドポイントにヒットする最初の要求のために約10 sekを要します。その要求の後、私は別のものを送って、すべてが期待どおりに機能します。ここで何度も掘削が必要です)

答えて

0

問題は基本クラスのAuthContextがAuthContextという名前の接続文字列を与えていたのですが、私のwebconfig内にmy connectionstringの名前がDefaultになっていたので、アプリケーションが最初の5〜6リクエストを開始したときに、データベースへの有効な接続。

だからここに私の解決策

public AuthContext() 
      : base("Default") 
     { 

     } 
0

リモートデバッグを試しましたか?これをAzureポータルのAzure Web Appで有効にしてから、Visual StudioからCloud Explorerを使ってWebアプリケーションを見つけ、Remote Debuggingを選択する必要があります。ウェブサイトをDEBUGモードで公開していることを確認してください。

これはおそらく、問題を特定するのに役立ちます。

+0

オーケー、私はそれをしようとしますです。うまくいけば、私はいくつかの答えを見つけるでしょう。 –

0

あなたは

のApplication_Start(設定)を必要とする理由私は表示されません。 config.EnsureInitialized();

あなたの設定内。これを削除してください。

+0

私はそれを削除する必要があると思う理由を詳述してください? Application_Startメソッドはすべての依存関係を登録し、config.ensureInitilializedはすべての依存関係が正しく登録されるようにします。あなたはそれがパフォーマンスと関係があると思いますか? –

関連する問題