我在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发送的序列化电子邮件。
答案 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}
结果: