Google 日历 API 在托管后无法在 IIS 服务器中工作

问题描述 投票:0回答:2

我创建了 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("&amp;", "").Replace("&lt;", "").Replace("&gt;", "").Replace("&quot;", "").Replace("&apos;", "").Replace("<br />", "").Replace("&nbsp;", "");
                    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() --- 内部异常堆栈跟踪结束 ---

那么这在在线主机上不起作用的原因是什么?

c# asp.net asp.net-mvc google-calendar-api
2个回答
0
投票

我也遇到过类似的问题。该库支持另一种与 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,
        });

0
投票

部署后出现的问题大多与网络有关,其中80%是受防火墙影响,有的没有启用cors。

必须有 SSL 才能请求。 但对于localhost来说,由于这个原因,除了本地构建部分之外,我们都可以正常使用。

重定向URI验证规则

© www.soinside.com 2019 - 2024. All rights reserved.