2015-11-02 20 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.爲什麼不使用併發令牌?\ –