GoogleWebAuthorizationBroker.AuthorizeAsync在释放到IIS7.0时超时
本文关键字:IIS7 0时 超时 释放 AuthorizeAsync GoogleWebAuthorizationBroker | 更新日期: 2023-09-27 18:01:08
在将代码发布到IIS7.0后,GoogleWebAuthorizationBroker.AuthorizeAsync出现问题。
通过我的开发环境,一切都按预期进行。我看到了Google权限屏幕,代码在App_data中创建了预期的令牌文件。然后我可以插入和更新日历条目。然而,当我发布代码时,我从GoogleWebAuthorizationBroker.AuthorizeAsync.收到一个请求超时错误
我已经手动将从开发环境中创建的令牌文件复制到web服务器上,代码运行良好。我可以在日历中创建事件。
我已经监控了防火墙,没有任何东西被阻止。
如果我删除了web服务器上的令牌文件的内容。我不会被提示重新授权并返回请求超时。
有人对出了什么问题有什么建议吗?
ClientSecrets client = new ClientSecrets
{
ClientId = SessionState.SystemSettings[SystemSettingKey.GoogleAccountClientId].Value,
ClientSecret = SessionState.SystemSettings[SystemSettingKey.GoogleAccountClientSecret].Value
};
IList<string> scopes = new List<string>();
scopes.Add(CalendarService.Scope.Calendar);
var credPath = HttpContext.Current.Server.MapPath("~/App_Data/");
var credential =
GoogleWebAuthorizationBroker.AuthorizeAsync(client, scopes, account, CancellationToken.None, new FileDataStore(credPath, true))
.Result;
// Create the calendar service using an initializer instance
BaseClientService.Initializer initializer = new BaseClientService.Initializer
{
HttpClientInitializer = credential,
ApplicationName = "App1"
};
我要在这里进行一次huntch的感觉,并说你自己有一个经典的死锁场景,因为你在这里阻塞了一个异步方法:
var credential = GoogleWebAuthorizationBroker.AuthorizeAsync(
client,
scopes,
account,
CancellationToken.None,
new FileDataStore(credPath, true)).Result;
您不应该在异步方法上使用.Result
,您应该始终使用await
:异步等待
public async Task AuthorizeAsync()
{
ClientSecrets client = new ClientSecrets
{
ClientId = SessionState.
SystemSettings[SystemSettingKey.GoogleAccountClientId].Value,
ClientSecret = SessionState.
SystemSettings[SystemSettingKey.GoogleAccountClientSecret].Value
};
IList<string> scopes = new List<string>();
scopes.Add(CalendarService.Scope.Calendar);
var credPath = HttpContext.Current.Server.MapPath("~/App_Data/");
var credential = await GoogleWebAuthorizationBroker.AuthorizeAsync(
client,
scopes,
account,
CancellationToken.None,
new FileDataStore(credPath, true));
// Create the calendar service using an initializer instance
BaseClientService.Initializer initializer = new BaseClientService.Initializer
{
HttpClientInitializer = credential,
ApplicationName = "App1"
};
}