调用Webjob不考虑传递的参数

时间:2017-05-30 11:33:44

标签: asp.net-mvc azure azure-webjobs azure-app-service-envrmnt

我从App Service Environment中托管的WebApp调用webjob。我以前调用的代码如下:

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&gt; 738495:SYS INFO]状态已更改为   初始化

     

[05/30/2017 11:18:51&gt; 738495:SYS INFO]运行脚本&#39; run.cmd&#39;同   脚本主机 - &#39; WindowsScriptHost&#39;

     

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

     

[05/30/2017 11:18:51&gt; 738495:INFO]

     

[05/30/2017 11:18:51&gt; 738495:INFO]   d:\本地\ TEMP \作业\触发\ XXXXX \ rwjgkw42.ann&GT; XXXX.EXE

     

[05/30/2017 11:18:51&gt; 738495:SYS INFO]状态已更改为Success

如果我去App Service Editor并修改run.cmd,如下所示:xxxx.EXE 1(1是参数)那么我控制台接受参数并记录如下:

  

[05/30/2017 10:17:26&gt; 738495:SYS INFO]状态已更改为   初始化

     

[05/30/2017 10:17:27&gt; 738495:SYS INFO]运行脚本&#39; run.cmd&#39;同   脚本主机 - &#39; WindowsScriptHost&#39;

     

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

     

[05/30/2017 10:17:27&gt; 738495:INFO]

     

[05/30/2017 10:17:27&gt; 738495:INFO]   d:\本地的\ Temp \ \工作触发\ XXXX \ bvck11x1.f3v&GT; xxx.EXE   1

     

[05/30/2017 10:17:32&gt; 738495:INFO] 5/30/2017 10:17:27 AM:1号工作   开始

     

[05/30/2017 10:17:32&gt; 738495:INFO]消息计数:1

     

[05/30/2017 10:17:32&gt; 738495:INFO] 1:好的

     

[05/30/2017 10:17:32&gt; 738495:INFO]状态计数:1

     

[05/30/2017 10:17:32&gt; 738495:INFO] 5/30/2017 10:17:32 AM:1号工作   完成

     

[05/30/2017 10:17:32&gt; 738495:SYS INFO]状态已更改为Success

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

请帮我解决这个问题。

  

2017年5月31日更新:

     

Webjobs的Zip Package具有以下内容:

     
      
  1. run.cmd
  2.   
  3. XXXX.EXE
  4.         

    当@SuwatCh引导我时,我删除了run.cmd而只留下了*.exe   在Zip Package中hid_t h5tools_get_native_type(hid_t type) { hid_t p_type; H5T_class_t type_class; type_class = H5Tget_class(type); if (type_class == H5T_BITFIELD) p_type = H5Tcopy(type); else p_type = H5Tget_native_type(type, H5T_DIR_DEFAULT); return(p_type); } ,然后创建WebJob,最后它工作了!

2 个答案:

答案 0 :(得分:2)

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

e.g。我刚尝试了一个包含以下内容的简单批处理文件:

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

%1%WEBJOBS_COMMAND_ARGUMENTS%都正确传递了值。

答案 1 :(得分:0)

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

  

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

     
      
  1. run.cmd
  2.   
  3. *的DLL
  4.   
  5. XXXX.EXE
  6.   

要解决我必须删除我的Zip包中的run.cmd并且它有效! :)