C# OWIN登录性能慢>;30秒

C# OWIN登录性能慢>;30秒,c#,azure,owin,superagent,C#,Azure,Owin,Superagent,当我尝试使用我的应用程序登录时,我有一个很大的性能问题。该应用程序是托管在Azure中的Web api应用程序。我使用react js作为前端 在我的SimpleAuthorizationprovider中,我获取用户并向ClaimSideEntity属性添加声明。如果我在本地调试它,我只会在第一次登录时出现性能缓慢的问题,但下一次登录时,登录是即时访问。当我将它上传到Azure中的测试环境时,问题在于每个请求都存在 我已在Azure中为web应用打开“始终打开”属性。我已经对请求进行了计时,需

当我尝试使用我的应用程序登录时,我有一个很大的性能问题。该应用程序是托管在Azure中的Web api应用程序。我使用react js作为前端

在我的SimpleAuthorizationprovider中,我获取用户并向ClaimSideEntity属性添加声明。如果我在本地调试它,我只会在第一次登录时出现性能缓慢的问题,但下一次登录时,登录是即时访问。当我将它上传到Azure中的测试环境时,问题在于每个请求都存在

我已在Azure中为web应用打开“始终打开”属性。我已经对请求进行了计时,需要花费大量时间的是SimpleAuthorizationprovider中的这段代码

  context.Validated(ticket);
在我的测试环境中,仅授权用户需要15瑞典克朗。我的前端可能也有一些延迟。在我的前端,我们使用superagent向web api发出请求

以下是我在startup类中的配置:

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);
    }
编辑:


我现在可以说context.validated(ticket)不是问题所在。我已经连接了Azure中的应用程序洞察,看看是否可以从那里获得更多有用的信息。我的猜测仍然是,在请求到达之前,api进程没有“预热”,这导致每次都需要提升该进程。当我在本地调试它时,第一个请求到达我的令牌端点大约需要10瑞典克朗。在那个请求之后,我发送了另一个请求,一切正常。这里还需要进一步挖掘;)

您是否尝试远程调试?您必须在Azure门户中的Azure Web应用上启用此功能,然后使用云资源管理器从Visual Studio查找您的Web应用并选择进行远程调试。确保以调试模式发布网站


也许这能帮你找出问题所在。

我不明白你为什么要这么做

应用程序启动(配置); config.EnsureInitialized()


在您的配置中。请删除此项。

问题在于基类AuthContext为connectionstring指定了名称AuthContext,但在我的webconfig中,我的connectionstring指定了名称Default,因此当应用程序启动时,第一个5或6请求只是跳转,因为没有到数据库的有效连接

这就是我的解决方案

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

        }

请说明你为什么认为我应该把它拿走?Application_Start方法注册所有依赖项,config.ensureInitialized确保所有依赖项都已正确注册。你认为这和表演有什么关系吗?好的,我会尽力的。希望我能找到一些答案,在我的例子中是:public AuthContext():base(“ConnectionString”){}