Azure on demand Web作业未收到格式正确的json序列化字符串

时间:2017-08-28 09:39:28

标签: c# azure json.net azure-webjobs ondemand

我在azure中部署了asp.net mvc站点的随需应变Web作业。 Web作业尝试使用sendgrid发送电子邮件。

我网站的用户填写表单,可选择附加文件并单击“发送”。服务器端我收集所有数据使用Newtonsoft.Json将其序列化为json。我的网络应用和网络工作都使用相同版本的Newtonsoft.Json。

gulp.src([
        'bower_components/simple/simple.css',
        //... more CSS files

        'src/scss/app.scss'
        ],
        {base: '.'})
    .pipe(sourcemaps.init())
    .pipe(sass())
    .pipe(sourcemaps.write())
    .pipe(gulp.dest('dist/css'));

然后我使用参数

将序列化数据发布到我的webjob
<package id="Newtonsoft.Json" version="10.0.3" targetFramework="net47" />

我的webjob接收到序列化数据,尝试使用Newtonsoft.Json对其进行反序列化并使用sendgrid发送电子邮件

在azure中运行Web作业时,我收到错误未处理的异常:System.AggregateException:发生了一个或多个错误。 ---&GT; Newtonsoft.Json.JsonReaderException:无效的JavaScript属性标识符:}。路径&#39;&#39;,第1行,第6位。位于C:\ Projects \ ABCD \ ABCD.Background \ Program.cs:第25行的ABCD.Background.Program.d__4.MoveNext()

第25行

  private static void TrySendEmail(Customer customer)
    {
        using (WebClient client = new WebClient())
        {
            string responsebody = Encoding.UTF8.GetString(client.UploadValues(ConfigurationManagerExtension.WebJobUrl,
                "POST",
                new System.Collections.Specialized.NameValueCollection
                {
                    {"email",JsonConvert.SerializeObject(CreateCustomerEmail(customer)) }
                }));
        }
    }

现在我试图将调试器附加到此webjob是徒劳的,因为它是on demand

然后我只是将web作业功能复制到我的控制器中的私有函数,以检查反序列化是否在我的Web应用程序中有效。我在本地运行我的网络应用程序,令人惊讶的是,它可以运行!!!

可能是什么问题Newtonsoft.Json在asp.net mvc应用程序中工作但不是在azure中部署的随需webjob?

帮助

更新

使用

添加了对webjob的记录
  DeserializedCustomer customer = JsonConvert.DeserializeObject<DeserializedCustomer>(email);

结果跟踪

  Console.WriteLine($"SerializedEmail - {serializedEmail}");

更新

为什么按需azure web作业无法正确接收帖子?

更新

使用webclient将简单对象发送到azure webjob

[08/28/2017 11:39:44 > 1a8d37: SYS INFO] Status changed to Initializing
[08/28/2017 11:39:44 > 1a8d37: SYS INFO] Job directory change detected: Job file 'ABCD.Backgr.exe' timestamp differs between source and working directories.
[08/28/2017 11:39:45 > 1a8d37: SYS INFO] Run script 'ABCD.Backgr.exe' with script host - 'WindowsScriptHost'
[08/28/2017 11:39:45 > 1a8d37: SYS INFO] Status changed to Running
[08/28/2017 11:39:45 > 1a8d37: INFO] SerializedEmail - {email}
[08/28/2017 11:39:45 > 1a8d37: ERR ] 
[08/28/2017 11:39:45 > 1a8d37: ERR ] Unhandled Exception: System.AggregateException: One or more errors occurred. ---> Newtonsoft.Json.JsonReaderException: Invalid JavaScript property identifier character: }. Path '', line 1, position 6.
[08/28/2017 11:39:45 > 1a8d37: ERR ]    at Newtonsoft.Json.JsonTextReader.ReadUnquotedPropertyReportIfDone(Char currentChar, Int32 initialPosition)
[08/28/2017 11:39:45 > 1a8d37: ERR ]    at Newtonsoft.Json.JsonTextReader.ParseUnquotedProperty()

日志显示相同的

  new System.Collections.Specialized.NameValueCollection
                {
                    {"email",JsonConvert.SerializeObject(new {Email = "johndoe@se7ev.com"}) }
                }));

是webclient还是kudu scm?

更新

要接收电子邮件参数,我会执行此操作,但我的webjob中没有收到任何内容

    [08/28/2017 11:39:45 > 1a8d37: INFO] SerializedEmail - {email}

我仍然没有收到asp.net mvc发送的序列化电子邮件。

1 个答案:

答案 0 :(得分:1)

据我所知,如果你想将参数传递给触发的webjobs。您应该遵循以下类型。

username and password

此外,如果您使用控制台应用程序作为Web作业。控制台应用程序获取args将删除JSON中的引号。

喜欢这个。如果你把这个json发送到webjobs args。

https://{yourwebsitename}.scm.azurewebsites.net/api/triggeredwebjobs/{webjobsname}/run?arguments=yourarugment

收到的字符串是:

{"Name":"johndoe@se7ev.com"}

因此,您应该使用以下代码更改转换后的字符串。

SerializedEmail - {Name:johndoe@se7ev.com}

结果:

enter image description here