2010-08-17 83 views
0

我有一個WCF服務,其中綁定也使用WebHttpBinding JSON輸入/結果。自定義JSON IErrorHandler在WCF返回StatusCode 200/504何時應該返回400

我做了一個自定義的IErrorHandler實現,以便當出現錯誤時能夠將StatusCode設置爲400,並返回JSON可理解的消息。這是你可以在任何地方找到的直接實現(很好的方式描述here)。

我的問題是:當我使用Visual Studio Web Development Server(Cassini)在本地測試它時,它完美地工作。但是,當我將其部署到我的測試服務器(Windows 2008,標準配置爲IIS等)時,它不起作用。

當我使用Firebug調用它並進行調試時,我得到一個HttpStatusCode 200作爲返回並且沒有響應文本。隨着提琴手我得到一個HttpStatusCode 504並沒有任何回報。但是,我期望的行爲(以及本地發生的行爲)是使用responseText集調用ajax調用的錯誤回調。

我遠程調試它,一切看起來都很好。執行管道是好的,所有的類都被調用,因爲它們應該像在本地一樣,除非它不起作用。

有什麼建議嗎?我幾乎沒有選擇這裏來解決這個問題。

非常感謝!

回答

0

如果螢火蟲和提琴手是給不同的結果,如果你telnet到它直接和執行的請求發生(喜歡的東西:)

GET /VirtualDirectoryAndGetData HTTP/1.1 
    HOST: example.com 
    [carriage return] 

,如果你以某種方式獲得奇它不會讓我感到吃驚頭文件/格式化(解釋爲什麼螢火蟲/提琴手不同意)

要測試的另一件事是發佈到您的開發機器,看看它是一個特定於計算機的問題還是服務器vs dev web服務器問題。

如果它的發生VS以外的任何地方,你也可以嘗試註釋掉線,您可以設置

rmp.StatusCode = System.Net.HttpStatusCode.BadRequest; 
    rmp.StatusDescription = "Bad request"; 

這可能表明它是否是一個響應代碼問題或錯誤處理程序問題。

如果您可以編輯問題以包含結果(刪除了敏感信息),我們會看看我們是否可以進一步追蹤它。

編輯:再次查看問題後,很可能是服務器在發送任何響應之前發生錯誤。 FF可能默認爲200,而ie可能會假設504(網關超時)。這是總推測,但是可能的。你在事件日誌中看到什麼?

+0

我會嘗試在另一臺機器上的telnet。但是,我能夠創建一個repro,令人驚訝的是,只有我的真實代碼無法工作。我將嘗試使用結果編輯問題。謝謝! – tucaz 2010-08-26 20:19:36