我有3个dll:
我需要计算Steam api请求(它们每天限制为100K),并且在一天结束时,我想发送有关每天总请求的电子邮件。
//My aspnet app global.asax
protected void Application_Start(Object sender, EventArgs e)
{
Steam.RequestCounter.Run();
}
//Steam.dll
public static void Run()
{
// .. request count logic
Notifications.SendEmail();
}
//Notifications.dll
public static void SendEmail()
{
//..email sending logic
}
如果调用堆栈如上所示,则不会发送电子邮件。为什么?
如果我直接从我的asp .net应用程序(global.asax)调用Notifications.SendEmail()
方法,它就可以了。
你能告诉我发生了什么吗?
编辑:
通话期间没有错误。 SmtpClient.Send()方法正常传递。即使我把它放进去试试,也不会发生异常。
这是我的Notifications.SendEmail方法:
public static void SendEmail(string subject, string body, params string[] recipients)
{
const string sender = "xxxx@outlook.com";
var client = new SmtpClient("smtp-mail.outlook.com")
{
Port = 587,
DeliveryMethod = SmtpDeliveryMethod.Network,
UseDefaultCredentials = false
};
var credentials = new System.Net.NetworkCredential(sender, "xxxx");
client.EnableSsl = true;
client.Credentials = credentials;
var mail = new MailMessage {From = new MailAddress(sender)};
foreach (var recipient in recipients)
{
mail.To.Add(recipient);
}
mail.Subject = subject;
mail.Body = body;
client.Send(mail);
}
这是发送电子邮件的情况(在global.asax中):
protected void Application_Start(Object sender, EventArgs e)
{
//call directly to Notifications.dll
Email.SendEmail(
"subject",
"body",
"xxx@outlook.com"
);
}
这是未发送电子邮件的情况:
protected void Application_Start(Object sender, EventArgs e)
{
//call to Steam.dll
Steam.RequestCounter.Run();
}
//Inside Steam.dll
public static void Run()
{
SendEmail();
}
private static void SendEmail()
{
//call to Notifications.dll
Email.SendEmail(
"subject",
"body",
"xxx@outlook.com"
);
}
所以问题不在于请求计数逻辑。我认为问题在于引用。也许主机环境(asp.net app)没有发送电子邮件所需的一切。如果没有发生错误,我不知道如何检查它。
答案 0 :(得分:1)
当您启动应用程序时,global.asax中的函数将被调用一次。因此,如果没有发生回收或部署,它将在星期一运行,而不会再运行。您需要一些时间触发器,调度程序,服务或类似的东西