2013-06-28 35 views
1

我想使用Windows HTTP Server API 2.0來包裝我的遺留C++代碼的RESTful Web服務。我從MSDN的示例應用程序開始,將其更改爲使用2.0 API,然後將應用程序分成三個進程:一個控制器應用程序,它創建一個命名隊列和url組,以及兩個相同的工作進程,它們是控制器應用程序的子進程。兩個工作者都同步調用HttpReceiveHttpRequest並等待傳入​​的請求。當他們收到請求時,他們會調用Sleep(5000)等待5秒鐘,然後再次調用HttpReceiveHttpRequest。這允許我從我的瀏覽器中發出第二個請求,同時一個工作進程仍然響應第一個請求。多個工作進程調用HttpReceiveHttpRequest

一個工作進程獲取第一個請求並等待。但是,第二個請求不會按照請求由第二個工作進程處理。相反,第一個工作進程獲得第二個請求。我怎樣才能讓傳入的請求分佈在我的工作進程中?我預計每個請求都會去等待HttpReceiveHttpRequest中的第一個工作進程。如果第一個工作進程仍在忙於處理請求,它將檢查第二個工作進程。我究竟做錯了什麼?

+0

我意識到我如何描述HttpReceiveHttpRequest處理是有點關閉的。 HttpReceiveHttpRequest中的每個工作進程都試圖從同一個命名隊列中獲取下一個請求。這些進程中只有一個會刪除第一個請求。當第二個請求放入隊列中時,第二個工作進程應該是唯一一個等待請求的進程,因此應該刪除並處理第二個請求。 –

回答

0

我已經找到了問題所在。我使用的Firefox帶有兩個帶有相同URL的選項卡(http://127.0.0.1:80/test),然後執行全部刷新。顯然,FF不會同時發出這兩個頁面請求,但發送一個,等待響應,然後發送另一個,即使選項卡中的動畫看起來好像它們都是同時發送的!如果我使用一個選項卡的IE和其他的FF,那麼我會得到重疊請求,我的示例應用程序使用兩個工作進程,正如所料!也適用於兩個IE標籤。只有FF表現出這種奇怪的行爲。