休息以在整个生命周期中只调用一次其他过程

时间:2014-04-08 10:03:32

标签: c# asp.net-mvc-4 asp.net-web-api

说Rest服务有一个请求,它打电话给另一个服务(电子邮件服务), 但是当Rest服务得到另一个请求给电子邮件服务的请求时,我希望它跳过这一步。

休息服务应该足够智能,以便在停止任何下一个休息服务请求被允许呼叫电子邮件服务时,查看电子邮件进程是否正在运行或停止。

休息方法: -

void SaveDataAndCallEmailService(Data data)
{
     cntx.Add(data);
     cntx.SaveChanges();

     SendEmail();
}

现在我的查询是如何只在电子邮件进程未运行时才调用“SendMail()”方法一次。

例如: -

void SaveDataAndCallEmailService(Data data)
{
     cntx.Add(data);
     cntx.SaveChanges();

     if(!EmailProcessIsRunning)
       SendEmail();

     EmailProcessIsRunning= true;
}

修改: -

现在,“EmailProcessIsRunning”始终为false,即使我将其标记为true。

当服务器收到第二个请求时,我发现“EmailProcessIsRunning”再次为false。

如何坚持它的价值?

1 个答案:

答案 0 :(得分:1)

在您的代码示例中,EmailProcessIsRunning未在任何地方定义。如果存在范围问题则更难以确定。

假设没有范围问题,如果您希望在无状态webapi服务器上的请求之间保存保存到EmailProcessIsRunning的值,则需要向服务器添加DependecyResolver。阅读本文以获取更多信息http://www.asp.net/web-api/overview/extensibility/using-the-web-api-dependency-resolver

编辑:(更简单的答案)

您可以向类添加静态属性,并在启动进程时将其设置为true。

e.g。

public bool static EmailProcessIsRunning { get; set; }