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