2015-11-02 49 views
1

我写了一个web-api项目,充当两个子系统之间的桥/网关。C#Web-Api - 处理入站请求以便接收它们'

我需要确保入站请求按“接收的顺序”进行处理。我不overaly熟悉网络的API是如何工作的关心我是这样的:

  1. 入站请求时,操作时拉开序幕,持续30秒。
  2. 在第一个请求正在处理的5秒内,第二个请求被接收并立即进行处理。

担心的原因是用户可能会提交更新记录,该记录将传播到其他子系统。但是,该用户可能因为任何原因提交第二个请求。我需要确保第一个请求先完成,然后再执行后续请求。因此,当请求发生洪流时,这只是一种先到先得的处理方式。

有没有人知道如果web-api这样的作品已经这样做,或者我需要做什么才能获得这种行为?

+0

很确定在Web API中没有这种机制,因为你需要某种密钥来锁定其他请求。不过,要解决您的问题,您需要某种信号量机制。但是,在这种情况下,您还应该考虑可能的超时。 –

+0

根据您想要发回给用户的内容,您可以对请求进行排队并发送“排队”响应。不特定于Web-API,但会覆盖您的要求。 –

回答

1

你可以通过使用全局静态标志来做到这一点。 声明一个变量这样

static bool bInProcess = false; 

现在,当您收到请求这个变量设置为true,做你的过程。一旦你完成你的过程设置这个变量为false;在你的过程中,如果有另一个请求到来,那么检查这个变量是否为true,然后将当前线程置于睡眠模式1秒,并检查它是否为真。或者你可以返回另一个进程正在运行的错误。

//Sample for loop to Queue 2nd request 
while (bInProcess) 
      { 
       Thread.Sleep(1000); 
      } 

你必须非常小心在这段代码。在“WebApiConfig”类中添加消息处理程序类并在该类中编写该代码。使用这个方法“config.MessageHandlers.Add”。我很久以前就做过了,所以我知道它很有用。

+0

这是如何1.线程安全? 2.睡觉会阻止你的线程-Boo。 3.为什么不使用并发令牌?\ –