Hang Fire 调用方法困难
Difficulty calling method from Hang Fire
我有一个负责安排约会的控制器方法。我希望安排一项任务,在预约登录服务前 5 分钟通过短信 (twilio) 提醒用户。
这是我的方法调用:
private SMSNotifier sms = new SMSNotifier();
BackgroundJob.Schedule( () => sms.SendPatientUpcomingApptNotificationTest(appointment), appointment.Start.AddMinutes(-5));
这是我的 class:
public SMSNotifier()
{
var accountSid = ConfigurationManager.AppSettings["TwilioSid"];
// Your Auth Token from twilio.com/console
var authToken = ConfigurationManager.AppSettings["TwilioToken"]; ;
TwilioClient.Init(accountSid, authToken);
}
public void SendPatientUpcomingApptNotificationTest(Appointment appt)
{
var message = MessageResource.Create(
to: new PhoneNumber("+xxxxxxxxxx"),
from: new PhoneNumber("+xxxxxxxxxx"),
body: string.Format("Hello {0} {1}! You have an upcoming web based video appointment with xxxxxxxxxx. Please login to the website to be seen. Your appointment time is: {2} Thank you - xxxxxxxx", "xxxxxxx", "xxxxxxxx", appt.Start));
}
}
我不断收到此错误:
Server Error in '/' Application.
Self referencing loop detected for property 'User' with type 'System.Data.Entity.DynamicProxies.AspNetUser_80E6332CC002F8FCF589159A68E74A0922BEE992586B9FE280D950E149CCC7EB'. Path 'Patient.ActiveSessions[0]'.
但我就是不明白为什么。我没有在任何地方引用用户对象。
我应该提到我显然用谷歌搜索了那个错误:
JSON.NET Error Self referencing loop detected for type
Self referencing loop detected - Getting back data from WebApi to the browser
∞
None 这提供了任何进展。我仍然有同样的错误。
大家怎么看?
我绝对认为这与我尝试安排 'SendPatientUpcomingApptNotificationTest' 方法的方式有关。我可以做一个 Console.WriteLine 并且它可以很好地排队工作。
IE:
BackgroundJob.Schedule( () => Console.WriteLine("TestSchedule"), appointment.Start.AddMinutes(-5));
完美运行
这听起来像是 运行 在尝试序列化您的 appointment
对象时出现此错误。
当您安排后台作业时,Hangfire 会将有关您正在调用的方法及其参数的信息保存到其作业存储中。如果您将复杂对象作为参数传递给方法,它会尝试将整个对象图序列化为 json.
recommended approach is to keep your job arguments small and simple。例如,将 appointmentId 传递给作业而不是整个约会:
BackgroundJob.Schedule( () => sms.SendPatientUpcomingApptNotificationTest(appointmentId), ...);
然后您将检索作业中的实际 appointment
。
我有一个负责安排约会的控制器方法。我希望安排一项任务,在预约登录服务前 5 分钟通过短信 (twilio) 提醒用户。
这是我的方法调用:
private SMSNotifier sms = new SMSNotifier();
BackgroundJob.Schedule( () => sms.SendPatientUpcomingApptNotificationTest(appointment), appointment.Start.AddMinutes(-5));
这是我的 class:
public SMSNotifier()
{
var accountSid = ConfigurationManager.AppSettings["TwilioSid"];
// Your Auth Token from twilio.com/console
var authToken = ConfigurationManager.AppSettings["TwilioToken"]; ;
TwilioClient.Init(accountSid, authToken);
}
public void SendPatientUpcomingApptNotificationTest(Appointment appt)
{
var message = MessageResource.Create(
to: new PhoneNumber("+xxxxxxxxxx"),
from: new PhoneNumber("+xxxxxxxxxx"),
body: string.Format("Hello {0} {1}! You have an upcoming web based video appointment with xxxxxxxxxx. Please login to the website to be seen. Your appointment time is: {2} Thank you - xxxxxxxx", "xxxxxxx", "xxxxxxxx", appt.Start));
}
}
我不断收到此错误:
Server Error in '/' Application.
Self referencing loop detected for property 'User' with type 'System.Data.Entity.DynamicProxies.AspNetUser_80E6332CC002F8FCF589159A68E74A0922BEE992586B9FE280D950E149CCC7EB'. Path 'Patient.ActiveSessions[0]'.
但我就是不明白为什么。我没有在任何地方引用用户对象。
我应该提到我显然用谷歌搜索了那个错误:
JSON.NET Error Self referencing loop detected for type
Self referencing loop detected - Getting back data from WebApi to the browser
∞
None 这提供了任何进展。我仍然有同样的错误。
大家怎么看?
我绝对认为这与我尝试安排 'SendPatientUpcomingApptNotificationTest' 方法的方式有关。我可以做一个 Console.WriteLine 并且它可以很好地排队工作。
IE:
BackgroundJob.Schedule( () => Console.WriteLine("TestSchedule"), appointment.Start.AddMinutes(-5));
完美运行
这听起来像是 运行 在尝试序列化您的 appointment
对象时出现此错误。
当您安排后台作业时,Hangfire 会将有关您正在调用的方法及其参数的信息保存到其作业存储中。如果您将复杂对象作为参数传递给方法,它会尝试将整个对象图序列化为 json.
recommended approach is to keep your job arguments small and simple。例如,将 appointmentId 传递给作业而不是整个约会:
BackgroundJob.Schedule( () => sms.SendPatientUpcomingApptNotificationTest(appointmentId), ...);
然后您将检索作业中的实际 appointment
。