0

我正在从应用服务环境中托管的 WebApp 调用 Web 作业。我用来调用的代码如下:

string userName = "$xxxx";
                    string userPassword = "xxxxx";
                    string webJobName = "xxxx";

                    var unEncodedString = String.Format($"{ userName}:{ userPassword}");
                    var encodedString = Convert.ToBase64String(System.Text.Encoding.ASCII.GetBytes(unEncodedString));
                    string URL = string.Format("https://xxxx.scm.azurewebsites.net/api/triggeredwebjobs/" + webJobName + "/run?arguments={0}", jobId.ToString());
                    System.Net.WebRequest request = System.Net.WebRequest.Create(URL);
                    request.Method = "POST";
                    request.ContentLength = 0;
                    request.Headers["Authorization"] = "Basic " +encodedString;
                    response = request.GetResponse();

我正在调用一个 webjob,它是一个控制台应用程序。我如何处理控制台应用程序中的参数如下:

static void Main(string[] args)
        {
            //
            var id = 0;
            if (args.Length > 0)
            {
                if (!int.TryParse(args[0].ToString(), out id))
                    id = 0;   
            }


            if (id > 0)
            {
                EmailJobExecution emailServ = new EmailJobExecution();
                EmailJobDBContext jobDB = new EmailJobDBContext();

                var jobs = jobDB.getActiveJob(id);

                List<string> logs = new List<string>();
                emailServ.ExecuteJob(jobs, out logs);

                foreach (var item in logs)
                {
                    Console.WriteLine(item);
                }
            }
        }

问题是我可以在 Webjob 仪表板中看到调用了 webjob 但没有传递参数。日志显示为:

[05/30/2017 11:18:51 > 738495:SYS INFO] 状态更改为正在初始化

[05/30/2017 11:18:51 > 738495: SYS INFO] 使用脚本主机 - 'WindowsScriptHost' 运行脚本'run.cmd'

[05/30/2017 11:18:51 > 738495:SYS INFO] 状态更改为正在运行

[2017 年 5 月 30 日 11:18:51 > 738495:信息]

[05/30/2017 11:18:51 > 738495: 信息] D:\local\Temp\jobs\triggered\xxxxx\rwjgkw42.ann>xxxx.EXE

[05/30/2017 11:18:51 > 738495:SYS INFO] 状态更改为成功

如果我去应用服务编辑器并像这样修改 run.cmd:xxxx.EXE 1(1 是参数)然后我控制台接受参数并像这样记录:

[05/30/2017 10:17:26 > 738495:SYS INFO] 状态更改为正在初始化

[05/30/2017 10:17:27 > 738495: SYS INFO] 使用脚本主机 - 'WindowsScriptHost' 运行脚本'run.cmd'

[05/30/2017 10:17:27 > 738495:SYS INFO] 状态更改为正在运行

[05/30/2017 10:17:27 > 738495:信息]

[05/30/2017 10:17:27 > 738495: 信息] D:\local\Temp\jobs\triggered\xxxx\bvck11x1.f3v>xxx.EXE 1

[2017 年 5 月 30 日 10:17:32 > 738495:信息] 2017 年 5 月 30 日上午 10:17:27:第 1 号工作开始

[2017 年 5 月 30 日 10:17:32 > 738495:信息] 消息计数:1

[2017 年 5 月 30 日 10:17:32 > 738495:信息] 1:好的

[05/30/2017 10:17:32 > 738495:信息] 状态计数:1

[2017 年 5 月 30 日 10:17:32 > 738495:信息] 2017 年 5 月 30 日上午 10:17:32:1 号作业已完成

[05/30/2017 10:17:32 > 738495:SYS INFO] 状态更改为成功

即使我在 Postman 中运行 URL,参数也不会通过。

请帮我解决这个问题。

2017 年 5 月 31 日更新:

Webjobs 的 Zip 包具有以下内容:

  1. 运行.cmd
  2. xxxx.EXE

在@SuwatCh 的指导下,我删除了Zip 包,run.cmd只留下了 *.exeZip 包,然后创建了 WebJob,终于成功了!

4

2 回答 2

2

以这种方式传递参数应该可以正常工作。请使用最小的应用程序进行测试,因为您所做的与 EmailJobExecution 相关的所有操作都与问题无关,应该省略。此外,如果您还使用邮递员进行复制,您的客户端代码与问题无关,因此请忽略它。

例如,我刚刚尝试了一个简单的批处理文件,其中仅包含:

echo Hello Azure WebJob!
echo command line arg %1
echo env variable %WEBJOBS_COMMAND_ARGUMENTS%

并且两者都%1正确%WEBJOBS_COMMAND_ARGUMENTS%地具有传入的值。

于 2017-05-30T23:13:20.720 回答
0

这样做的原因没有相应地起作用,因为 Zip 包确实有我自己的 run.cmd。

在我的 Zip 包中的解决方案之前是:

  1. 运行.cmd
  2. *.dll
  3. xxxx.EXE

为了解决这个问题,我必须删除run.cmd我的 Zip 包中的 Zip 包,它起作用了!:)

于 2017-06-01T07:26:55.363 回答