2012-01-18 33 views
1

應用鏈: - 32位模式和經典模式管道中止ISAPI請求:

  • IIS 7.5 /服務器2008R2下運行一個Delphi ISAPI應用。

  • ISAPI應用程序(TISAPIApplication)使用Delphi XE構建。

  • 客戶端是一個Delphi EXE,它生成包含請求的內容,包括用於跟蹤所述請求內容在客戶端生成的唯一內部標識符的XML文檔等

  • 客戶端產生一個線程和上命中ISAPI應用webServer,傳入包含請求信息的XML文檔;

  • 客戶端線程在服務器響應中等待,並在線程終止時向客戶端發出信號,表示請求已在服務器上處理。

問題:

  • 用戶錯誤發送一個有潛力的運行小時和/或嗆了我們的基礎設施的請求。

  • 我想啓用客戶端應用程序發送消息到服務器以中止該請求(只有該請求)。

建議的解決方案:

我提出的解決方案是建立在Web服務器上的字典我的客戶端的唯一標識符與被服務器端產生一個特定的把手或ID的線程關聯由ISAPI進程來處理請求。如果客戶端使用客戶端標識符發送中止請求,則此服務器端ID隨後可用於跟蹤和中止請求。

- 我不知道是什麼屬性/線程ID /手柄,我應該在服務器端被抓,如何得到它,以及如何使用它來中止請求。如果我可以通過Delphi線程訪問請求處理程序,所有這些都應該很容易。

任何人都知道如何去做這件事?我很確定這可以完成,但我不知道如何去做。在Delphi的XE文檔中看了一下TWebRequest等,還沒找到。

再一次,請注意:我只需要殺死那個特定的請求,而不是整個ISAPI進程 - 我不想中止任何其他未決請求。

回答

1

從我的導師之一:要做到這一點

最好的辦法是在產卵的ISAPI產生線程一個新的線程和存儲其在一個會話緩存參照。當ISAPI線程完成您的工作時,它會在此線程上等待 - 您可以通過緩存的引用終止此線程,並且ISAPI線程將終止。

我實施了這個解決方案,它工作得很好。