我创建了一个控制台应用程序来读取gmail收件箱。我需要我的控制台应用程序每15分钟读取一次电子邮件。所以我使用runmode将“控制台应用程序”发布为webjobs:“On demand”并使用azure services(web apps)发布应用程序)。
但我的webjobs似乎没有运行,当我选择发布为azure webjobs时,没有选项安排webjob。
我发布后立即在visual studio中收到此错误:
'ICICIEmailParser.sstageEntities-Web.config Connection String' argument cannot be null or empty
webjob没有预定的时间,所以我从azure portal手动运行webjob,当查看日志时我看到下面的错误
[01/03/2017 06:48:38> 7e6d88:SYS INFO]状态已更改为正在初始化 [01/03/2017 06:48:38> 7e6d88:SYS INFO]检测到作业目录更改:作业文件'ICICIEmailParser.application'时间戳在源目录和工作目录之间不同。 [01/03/2017 06:48:39> 7e6d88:SYS INFO]使用脚本主机运行脚本'ICICIEmailParser.exe' - 'WindowsScriptHost' [01/03/2017 06:48:39> 7e6d88:SYS INFO]状态已更改为正在运行 [01/03/2017 06:48:40> 7e6d88:ERR] [01/03/2017 06:48:40> 7e6d88:ERR]未处理的异常:System.AggregateException:发生了一个或多个错误。 ---> System.AggregateException:发生一个或多个错误。 ---> System.Net.HttpListenerException:拒绝访问 [01/03/2017 06:48:40> System.Net.HttpListener.SetupV2Config()中的7e6d88:ERR] [01/03/2017 06:48:40> System.Net.HttpListener.Start()中的7e6d88:ERR] [01/03/2017 06:48:40> 7e6d88:ERR]在Google.Apis.Auth.OAuth2.LocalServerCodeReceiver.d__6.MoveNext() [01/03/2017 06:48:40> 7e6d88:ERR] ---从抛出异常的先前位置开始的堆栈跟踪结束--- [01/03/2017 06:48:40> 7e6d88:ERR]在System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务任务) [01/03/2017 06:48:40> 7e6d88:ERR]在System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务) [01/03/2017 06:48:40> 7e6d88:ERR]在Google.Apis.Auth.OAuth2.AuthorizationCodeInstalledApp.d__8.MoveNext() [01/03/2017 06:48:40> 7e6d88:ERR] ---从抛出异常的先前位置开始的堆栈跟踪结束--- [01/03/2017 06:48:40> 7e6d88:ERR]在System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务任务) [01/03/2017 06:48:40> 7e6d88:ERR]在System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务) [01/03/2017 06:48:40> 7e6d88:ERR]在Google.Apis.Auth.OAuth2.GoogleWebAuthorizationBroker.d__4.MoveNext() [01/03/2017 06:48:40> 7e6d88:ERR] ---从抛出异常的先前位置开始的堆栈跟踪结束--- [01/03/2017 06:48:40> 7e6d88:ERR]在System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务任务) [01/03/2017 06:48:40> 7e6d88:ERR]在System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务) [01/03/2017 06:48:40> 7e6d88:ERR]在Google.Apis.Auth.OAuth2.GoogleWebAuthorizationBroker.d__1.MoveNext() [01/03/2017 06:48:40> 7e6d88:ERR] ---内部异常堆栈跟踪结束--- [01/03/2017 06:48:40> System.Threading.Tasks.Task.ThrowIfExceptional(Boolean includeTaskCanceledExceptions)中的7e6d88:ERR] [01/03/2017 06:48:40> 7e6d88:ERR]在System.Threading.Tasks.Task
导致作业失败1.GetResultCore(Boolean waitCompletionNotification) [01/03/2017 06:48:40 > 7e6d88: ERR ] at System.Threading.Tasks.Task
1.get_Result() [01/03/2017 06:48:40> 7e6d88:ERR]在GmailQuickstart.Program.d__3.MoveNext() [01/03/2017 06:48:40> 7e6d88:ERR] ---内部异常堆栈跟踪结束--- [01/03/2017 06:48:40> 7e6d88:ERR]在System.Threading.Tasks.Task.WaitAll(Task []任务,Int32 millisecondsTimeout,CancellationToken cancellationToken) [01/03/2017 06:48:40> 7e6d88:ERR]在GmailQuickstart.Program.Main(String [] args) [01/03/2017 06:48:40> 7e6d88:SYS INFO]状态已更改为Failed [01/03/2017 06:48:40> 7e6d88:SYS ERR]由于退出代码-532462766
我做过的事情:
我有一个google oauth的client-secret.json文件。 我在我的azure web app身份验证/授权中添加了google secret和client id 我在google开发者控制台中设置了javascript origin并重定向uri
这是我的主要方法:
static void Main(string[] args)
{
Task.WaitAll(GetEmail());
}
static async Task GetEmail() {
//my c# code to read gmail inbox...
}
任何帮助将不胜感激!
提前致谢
答案 0 :(得分:0)
未处理的异常:System.AggregateException:发生了一个或多个错误。 ---> System.Net.HttpListenerException:访问被拒绝
根据您的说明,我假设您已按照.NET Quickstart创建了向Gmail API发出请求的.NET控制台应用程序。我按照上面的教程并将其部署为Azure WebJobs,然后我可以重现此错误。在Azure上运行命令行应用程序(WebJob)时,它会提示您授权访问并在Web服务器的默认浏览器中打开新窗口或选项卡。但是,Azure WebJobs作为后台任务在Azure上托管的网站后面进行常规作业和批处理工作,最终用户无法与您的WebJob交互以完成授权。
但我的webjobs似乎没有运行,当我选择发布为azure webjobs时,没有选项安排webjob。
众所周知,您可以利用以下方法来安排WebJob:
TimerTrigger
使用Azure Scheduler job按计划触发您的WebJob
我在我的azure web app认证/授权中添加了google secret和client id我设置了javascript origin并在google开发者控制台中重定向uri
根据我的理解,您正在尝试使用Google帐户对您的网络应用进行身份验证/授权,并安排WebJob使用已记录的UserCredential从Gmail中读取邮件。据我所知,WebJobs无法直接与您的网络应用程序通信,我认为您需要存储已记录的UserCredential并安排您的webjob检索UserCredential以从Gmail API读取消息。