我创建了 MVC Web 应用程序来在谷歌日历上发布事件。经过卑鄙的尝试后,它在本地主机中运行良好。但今天,当我将其托管在在线 iis 网络服务器中时,它给出以下错误消息(开发者帐户中的所有 google 设置均已正确完成)
这是我的代码:
UserCredential credential = GoogleWebAuthorizationBroker.AuthorizeAsync(
new ClientSecrets
{
ClientId = siteinfoCalendar.ClientId,
ClientSecret = siteinfoCalendar.ClientSecret,
},
new[] { CalendarService.Scope.Calendar },
townName,
CancellationToken.None,
new DBDataStotre()).Result;
// Create Google Calendar API service.
var service = new CalendarService(new BaseClientService.Initializer()
{
HttpClientInitializer = credential,
ApplicationName = siteInfo.TownName,
});
string description = calendarInfo.FirstOrDefault().Issue.Replace("&", "").Replace("<", "").Replace(">", "").Replace(""", "").Replace("'", "").Replace("<br />", "").Replace(" ", "");
Event newPtoEvent = new Event();
newPtoEvent.Summary = calendarInfo.FirstOrDefault().UserName + " on " + leaveDescription.Trim() + " leave.";
newPtoEvent.Description = calendarInfo.FirstOrDefault().Issue;
newPtoEvent.Start = new EventDateTime();
newPtoEvent.Start.DateTime = calendarInfo.FirstOrDefault().StartDateLocalTime;
newPtoEvent.End = new EventDateTime();
newPtoEvent.End.DateTime = calendarInfo.FirstOrDefault().EndDateLocalTime;
var createCalendarEvent = service.Events.Insert(newPtoEvent, siteinfoCalendar.CalendarID);
Task.Run(() => { createCalendarEvent.Execute(); });
它在 localhost 上运行没有问题,但现在当它托管在 iis 托管服务器上时,它会给出以下堆栈跟踪错误消息:
发生一个或多个错误。 mscorlib 位于 System.Threading.Tasks.Task`1.GetResultCore(布尔值 等待完成通知)在 LibTsService.ServiceRequests.GoogleCalendar.PTOCalendarUpdate.UpdateClendar(Int32 投诉 ID、IDbConnection& con) at LibTsService.ServiceRequests.SrStatusUpdateService.DeclineApprovePto(布尔值 是职员)在 LibTsService.ServiceRequests.SrStatusUpdateService.Any(SrStatusUpdate 请求)访问被拒绝 系统位于 System.Diagnostics.Process.StartWithShellExecuteEx(ProcessStartInfo startInfo) 在 System.Diagnostics.Process.Start(ProcessStartInfo 开始信息)位于 Google.Apis.Auth.OAuth2.LocalServerCodeReceiver.d__6.MoveNext() --- 从先前抛出异常的位置开始的堆栈跟踪结束 --- at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() 在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务 任务)在 Google.Apis.Auth.OAuth2.AuthorizationCodeInstalledApp.d__8.MoveNext() --- 从先前抛出异常的位置开始的堆栈跟踪结束 --- at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() 在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务 任务)在 Google.Apis.Auth.OAuth2.GoogleWebAuthorizationBroker.d__4.MoveNext() --- 从先前抛出异常的位置开始的堆栈跟踪结束 --- at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() 在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务 任务)在 Google.Apis.Auth.OAuth2.GoogleWebAuthorizationBroker.d__1.MoveNext() Exception.ToString():System.AggregateException:一个或多个错误 发生。 ---> System.ComponentModel.Win32Exception:访问被拒绝 在 System.Diagnostics.Process.StartWithShellExecuteEx(ProcessStartInfo startInfo) 在 System.Diagnostics.Process.Start(ProcessStartInfo 开始信息)位于 Google.Apis.Auth.OAuth2.LocalServerCodeReceiver.d__6.MoveNext() --- 从先前抛出异常的位置开始的堆栈跟踪结束 --- at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() 在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务 任务)在 Google.Apis.Auth.OAuth2.AuthorizationCodeInstalledApp.d__8.MoveNext() --- 从先前抛出异常的位置开始的堆栈跟踪结束 --- at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() 在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务 任务)在 Google.Apis.Auth.OAuth2.GoogleWebAuthorizationBroker.d__4.MoveNext() --- 从先前抛出异常的位置开始的堆栈跟踪结束 --- at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() 在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务 任务)在 Google.Apis.Auth.OAuth2.GoogleWebAuthorizationBroker.d__1.MoveNext() --- 内部异常堆栈跟踪结束 ---
那么这在在线主机上不起作用的原因是什么?
我也遇到过类似的问题。该库支持另一种与 Web 应用程序一起使用的身份验证方式。我稍微修改了我的代码。这是代码片段。
ClientSecrets cs = new ClientSecrets
{
ClientId = "Put_Your_Client_Id_Here",
ClientSecret = "Put_Your_Client_Secret_Here"
};
string ApplicationName = "Google Calendar API .NET Quickstart";
//Path where Json File is stored
FileDataStore store = new FileDataStore(System.Web.HttpContext.Current.Server.MapPath("~/Uploads/Template/credentials/calendar-dotnet-quickstart.json/calendar-dotnet-quickstart.json"), true);
UserCredential credential = GoogleWebAuthorizationBroker.AuthorizeAsync(cs, Scopes, "user", CancellationToken.None, store).Result;
var service = new CalendarService(new BaseClientService.Initializer()
{
HttpClientInitializer = credential,
ApplicationName = ApplicationName,
});
部署后出现的问题大多与网络有关,其中80%是受防火墙影响,有的没有启用cors。
必须有 SSL 才能请求。 但对于localhost来说,由于这个原因,除了本地构建部分之外,我们都可以正常使用。