【问题标题】:Azure webjobs failed [Access is denied]Azure webjobs 失败 [访问被拒绝]
【发布时间】:2017-05-17 05:40:36
【问题描述】:

我创建了一个控制台应用程序来阅读 gmail 收件箱。我需要我的控制台应用程序每 15 分钟阅读一次电子邮件。所以我将控制台应用程序发布为具有运行模式的网络作业:“按需”并使用 azure 服务(网络应用程序)发布该应用程序)。

但是当我选择发布为 azure webjobs 时,我的 webjobs 似乎没有运行,并且没有安排 webjobs 的选项。

我一发布就在 Visual Studio 中收到此错误:

'ICICIEmailParser.sstageEntities-Web.config Connection String' argument cannot be null or empty

webjob 没有预定时间,所以我从 azure 门户手动运行 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] 使用脚本主机 - 'WindowsScriptHost' 运行脚本'ICICIEmailParser.exe' [01/03/2017 06:48:39 > 7e6d88: SYS INFO] 状态更改为正在运行 [01/03/2017 06:48:40 > 7e6d88:错误] [01/03/2017 06:48:40 > 7e6d88:ERR] 未处理的异常:System.AggregateException:发生了一个或多个错误。 ---> System.AggregateException:发生一个或多个错误。 ---> System.Net.HttpListenerException:访问被拒绝 [01/03/2017 06:48:40 > 7e6d88: ERR ] 在 System.Net.HttpListener.SetupV2Config() [01/03/2017 06:48:40 > 7e6d88: ERR ] 在 System.Net.HttpListener.Start() [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 > 7e6d88: ERR ] 在 System.Threading.Tasks.Task.ThrowIfExceptional(Boolean includeTaskCanceledExceptions) [01/03/2017 06:48:40 > 7e6d88: ERR ] 在 System.Threading.Tasks.Task1.GetResultCore(Boolean waitCompletionNotification) [01/03/2017 06:48:40 > 7e6d88: ERR ] at System.Threading.Tasks.Task1.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(任务 [] 任务,Int32 毫秒超时,CancellationToken 取消令牌) [01/03/2017 06:48:40 > 7e6d88: ERR ] 在 GmailQuickstart.Program.Main(String[] args) [01/03/2017 06:48:40 > 7e6d88: SYS INFO] 状态更改为失败 [01/03/2017 06:48:40 > 7e6d88: SYS ERR ] 由于退出代码 -532462766,作业失败

我做过的事情:

我有一个 google oauth 的 client-secret.json 文件。 我在我的 azure web 应用程序身份验证/授权中添加了 google secret 和 client id 我在谷歌开发者控制台中设置了 javascript 来源和重定向 uri

这是我的主要方法:

static void Main(string[] args)
    {

        Task.WaitAll(GetEmail());


    }
static async Task GetEmail() {
//my c# code to read gmail inbox...

}

任何帮助将不胜感激!

提前致谢

【问题讨论】:

  • 听起来您在问两个不相关的问题:一个与如何进行调度有关,另一个与您在运行 WebJobs 时遇到的错误有关。请简化问题以仅涵盖一件事。我认为运行时问题是您的主要问题。

标签: c# console-application gmail-api azure-webjobs


【解决方案1】:

未处理的异常:System.AggregateException:发生一个或多个错误。 ---> System.Net.HttpListenerException: 访问被拒绝

根据您的描述,我假设您已按照.NET Quickstart 创建了向 Gmail API 发出请求的 .NET 控制台应用程序。我按照上面的教程将其部署为 Azure WebJobs,然后我可以重现此错误。在 Azure 上运行命令行应用程序 (WebJob) 时,它会提示您授权访问并在 Web 服务器的默认浏览器中打开一个新窗口或选项卡。但是,Azure WebJobs 作为 Azure 上托管的网站背后的后台任务,用于执行常规作业和批量工作,最终用户无法与您的 WebJob 交互以完成授权。

但是当我选择发布为 azure webjobs 时,我的 webjobs 似乎没有运行,并且没有安排 webjobs 的选项。

据我所知,您可以利用以下方法来安排您的 WebJob:

我在我的 azure Web 应用程序身份验证/授权中添加了 google 密码和客户端 ID 我在 google 开发者控制台中设置了 javascript 来源和重定向 uri

据我了解,您正在尝试使用 Google 帐户对您的网络应用程序进行身份验证/授权,并安排 WebJob 使用已记录的 UserCredential 读取来自 Gmail 的消息。据我所知,WebJobs 无法直接与您的网络应用程序通信,我假设您需要存储记录的 UserCredential 并安排您的网络作业来检索 UserCredential 以从 Gmail API 读取消息。

【讨论】:

  • 感谢您的回复。我以某种方式设法运行了 webjob。这就是我所做的。我使用服务器到服务器 gmail api 的 oauth,因此不需要用户交互。他们为我提供了我用来获取谷歌令牌然后阅读电子邮件的私钥。部署时我只是在我的远程计算机(不是天蓝色)中部署了发布文件夹。当我运行我的 exe 时,我的程序从远程计算机成功运行。希望这可以帮助某人谁正在努力实现同样的目标。
  • 能否请您发布您的解决方案并提供更多详细信息并将其标记为可能遇到类似问题的其他社区的答案?
猜你喜欢
  • 2020-11-24
  • 1970-01-01
  • 2019-05-30
  • 1970-01-01
  • 1970-01-01
  • 2012-09-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多