休息以在整个生命周期中仅调用一次另一个进程

本文关键字:调用 进程 另一个 一次 周期 生命 | 更新日期: 2023-09-27 17:57:13

说 Rest 服务收到一个请求,该请求正在调用另一个服务(电子邮件服务),但是当 Rest 服务收到另一个调用电子邮件服务的请求时,我希望它跳过该步骤。

此外,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"总是假的,即使我把它标记为真。

当服务器收到第二个请求时,我发现"电子邮件进程正在运行"再次为假。

如何保持它的价值?

休息以在整个生命周期中仅调用一次另一个进程

在代码示例中,EmailProcessIsRunning 未在任何地方定义。使 if 更难查看是否存在范围问题。

假设没有范围问题,如果要保留保存到无状态 webapi 服务器上的请求之间的值EmailProcessIsRunning,则需要将依赖项解析程序添加到服务器。阅读此内容以获取更多信息 http://www.asp.net/web-api/overview/extensibility/using-the-web-api-dependency-resolver

编辑:(更简单的答案)

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

例如

public bool static EmailProcessIsRunning { get; set; }