我正在尝试创建一个可以管理 Google 日历并访问 Google People 的聊天机器人。我开发了代码,它可以完美地离线工作。当尝试在线上传所有内容时就会出现问题。
代码是C#语言,在微软提供的模板之上开发。当您在 Azure 上加载代码时,LUIS 的功能可以正常工作,但当您调用 Google API 时就会出现问题。出现的错误如下:
System.AggregateException:发生一个或多个错误。 —>
System.Net.HttpListenerException:访问被拒绝
System.Net.HttpListener.SetupV2Config() 位于
System.Net.HttpListener.Start() 位于
Google.Apis.Auth.OAuth2.LocalServerCodeReceiver.StartListener() 位于
Google.Apis.Auth.OAuth2.LocalServerCodeReceiver.d__14.MoveNext()
— 抛出异常的上一个位置的堆栈跟踪结束
- 在
System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务
任务)在
System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务
任务)在
Google.Apis.Auth.OAuth2.AuthorizationCodeInstalledApp.d__8.MoveNext()
— 抛出异常的上一个位置的堆栈跟踪结束
- 在
System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务
任务)在
System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务
任务)在
Google.Apis.Auth.OAuth2.GoogleWebAuthorizationBroker.d__4.MoveNext()
— 抛出异常的上一个位置的堆栈跟踪结束
- 在
System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务
任务)在
System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务
任务)在
Google.Apis.Auth.OAuth2.GoogleWebAuthorizationBroker.d__1.MoveNext()
— 内部异常堆栈跟踪结束 — 位于
System.Threading.Tasks.Task.ThrowIfExceptional(布尔值
包括任务取消异常)在
System.Threading.Tasks.Task.Wait(Int32毫秒超时,
CancellationToken(取消令牌)位于
Microsoft.Bot.Sample.LuisBot.Dialogs.LinkContact.ConnectPeople() 位于
Microsoft.Bot.Sample.LuisBot.Dialogs.LinkContact.GetUserName() —>
(内部异常#0)System.Net.HttpListenerException(0x80004005):
System.Net.HttpListener.SetupV2Config() 处的访问被拒绝
System.Net.HttpListener.Start() 位于
Google.Apis.Auth.OAuth2.LocalServerCodeReceiver.StartListener() 位于
Google.Apis.Auth.OAuth2.LocalServerCodeReceiver.d__14.MoveNext()
— 抛出异常的上一个位置的堆栈跟踪结束
- 在
System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务
任务)在
System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务
任务)在
Google.Apis.Auth.OAuth2.AuthorizationCodeInstalledApp.d__8.MoveNext()
— 抛出异常的上一个位置的堆栈跟踪结束
- 在
System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务
任务)在
System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务
任务)在
Google.Apis.Auth.OAuth2.GoogleWebAuthorizationBroker.d__4.MoveNext()
— 抛出异常的上一个位置的堆栈跟踪结束
- 在
System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务
任务)在
System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务
任务)在
Google.Apis.Auth.OAuth2.GoogleWebAuthorizationBroker.d__1.MoveNext()
在网上我发现了很多类似问题的案例,不幸的是,很少有人得到解答,而且在少数答案中,没有一个能解决问题。有人有什么想法吗?
我关注的最后一点之一与这份报告有关https://github.com/google/google-api-dotnet-client/issues/908 https://github.com/google/google-api-dotnet-client/issues/908,在某个时候它说:
“听起来它试图在服务器上启动浏览器,而不是在
用户的浏览器。它可以在本地主机上运行,因为你有能力
在本地图片上启动新的浏览器会话。问题来了,当
您尝试部署它,它会尝试在服务器上启动浏览器
而不是在新的客户端浏览器中。您应该关注这个 authweb
应用https://developers.google.com/api-client-library/dotnet/guide/aaa_oauth#web-applications-aspnet-mvc https://developers.google.com/api-client-library/dotnet/guide/aaa_oauth#web-applications-aspnet-mvc"
我不知道这是否是问题所在。我尝试点击链接,但无法将这些说明与我的代码集成。
这是我的验证码:
private static PeopleServiceService ConnectPeople()
{
// Create OAuth credential.
CancellationTokenSource tokenSource = new CancellationTokenSource();
CancellationToken token = tokenSource.Token;
IDataStore credentialPersistanceStore = new Dialogs.myDataStore();
Task<UserCredential> result = GoogleWebAuthorizationBroker.AuthorizeAsync(
new ClientSecrets
{
ClientId = "*id*",
ClientSecret = "*secret*"
},
new[] { "profile", "https://www.googleapis.com/auth/contacts.readonly" },
"me",token,
credentialPersistanceStore);
result.Wait();
UserCredential credential = result.Result;
// Create the service.
var service = new PeopleServiceService(new BaseClientService.Initializer()
{
HttpClientInitializer = credential,
ApplicationName = "*nome*",
});
return service;
}
然后我使用“服务”来使用 Google API。
我曾做过以下工作:https://developers.google.com/google-apps/calendar/quickstart/dotnet https://developers.google.com/google-apps/calendar/quickstart/dotnet
and https://dev.botframework.com/ https://dev.botframework.com/.
谢谢大家