我想添加一些SOAP消息日誌記錄功能,以舊的ATL服務器Web服務在Windows Server 2008框中IIS 7.5集成模式下運行,但運行到一個奇怪的問題。爲了進一步的背景,我已經將包含HttpModule的程序集添加到ATL Server Web服務的web.config的modules元素中。HttpModule ATL服務器服務InputStream失敗
我一直在追蹤提供的答案here和記錄本身的偉大工程。
但是,無論何時使用此日誌記錄功能,服務都會響應「SOAP無效請求」,而日誌文件具有預期的SOAP消息。我已經做了很多擺弄,並且發現只有當我在BeginRequest事件的處理程序中訪問請求對象的InputStream屬性時纔會發生這種情況。如果我連簡單地設置一個變量的InputStream的這樣的長度將會失敗:
private void OnBegin(object sender, EventArgs e)
{
var request = _application.Request;
//this will blow up
var foo = request.InputStream.Position;
}
如果我不碰我的處理程序中的InputStream(不這樣做,當我只有多好這樣做顯然會記錄請求的內容),請求會很好地完成。
我可以訪問請求對象中的標題值以及涉及的HttpApplication的各種其他屬性,但訪問InputStream會導致服務窒息。
ATL服務器有內在的東西會阻止我做這種日誌記錄嗎?我是否需要在我的BeginRequest處理程序中添加某種鎖定或其他安全措施以確保其行爲?我的處理程序是否以某種方式使InputStream陷入了無法使用的狀態?
解決這個問題的另一種方法是詢問是否有辦法看到請求到達我的服務(即在此HttpModule執行後)?
也許值得一提的是我使用SoapUI來測試服務。
編輯: 我現在已經做了一些失敗請求跟蹤IIS和我得到這個錯誤信息:
ModuleName IsapiModule
Notification 128
HttpStatus 500
HttpReason Internal Server Error
HttpSubStatus 0
ErrorCode 0
ConfigExceptionInfo
Notification EXECUTE_REQUEST_HANDLER
ErrorCode The operation completed successfully. (0x0)
這來自於處理程序ATL服務器Web服務(即該服務的DLL )。直接在這之前是「GENERAL_READ_ENTITY_START」和「GENERAL_READ_ENTITY_END」的消息,而「END」有這樣的消息:
BytesReceived 0
ErrorCode 2147942438
ErrorCode Reached the end of the file. (0x80070026)
這是否意味着什麼,我認爲這意味着什麼?處理程序沒有收到任何數據?這是更多的證據指向我的HttpModule搞亂Request的InputStream嗎?
好問題(並感謝回覆),但是,我確定該請求是有效的。我已經嘗試過使用與相同結果鏈接的示例的確切語法。我也做了一個健全的檢查,並將這個HttpModule添加到一個普通的簡潔的ASP.NET網站,它工作正常(請求被記錄並顯示在目標頁面中)。很奇怪。 –