2014-04-21 60 views
0

我有一個運行在Ubuntu 12.04LTS和Mono(mono-complete-2.10.8.1)上的有問題的.Net應用程序,它在localhost:8090上激活了一個HttpListener。每當我向服務器發送一個請求時,它立即發回400錯誤的請求。在Ubuntu/Mono上運行的HttpListener返回400錯誤請求

我認爲這可能是Ubuntu的事情,因爲: - 在Windows上運行時,完全相同的應用程序處理請求很好。事實上,它處理請求是否在MSFT CLR或Mono for Windows CLR中執行。 - 根據其他日誌記錄,綁定成功。 - 我得到一個背景下,像這樣後立即記錄聲明:

try { 
    var context = httpListener.GetContext(); 
    Log.Debug("Request received"); 
    // Send to handlers, etc... 
} catch (Exception ex) { 
    Log.Error("HttpListener error: {0}", ex.Message); 
} 

現在在Ubuntu設置,日誌記錄語句不會被報道,但我還是設法得到了400回來了,所以我只能假設HttpListener從未獲得請求,或者在給我一個更改來處理它之前生成響應。

如果有什麼,有人可以建議如何解決這個問題?我在Linux上最好是少年。儘管默認情況下iptables設置爲全部允許,但我爲我正在監聽的端口挖了一個洞。

感謝

編輯:此外,沒有例外伸手被捉在上面的代碼片段要麼。

+0

您是否試圖在不執行程序的情況下執行請求?也許別的東西正在接到你的電話...... – Gusman

+0

謝謝你的回覆。我只是試過,當服務器沒有運行時,我得到「無法連接到服務器」。當它運行時,我會收到「錯誤的請求」。 –

+0

好吧,那麼發現有什麼事情會有點困難,網絡嗅探器或http代理可以幫助你很多,通過它來請求你的請求,並觀察真正的請求。 – Gusman

回答

0

對不起,我對這個晚會太晚了,但你綁定了什麼IP或主機名?我發現,與單聲道它需要在HTTP頭匹配與被交鋒主機名前綴HOST頭,即

HttpListener http = new HttpListener(); 
http.Prefixes.Add("http://hostname.com:80/"); 
http.Start(); 

它要求無論是在HTTP請求本身(上線)有主機:hostname.com存在。

使用IP地址時,「127.0.0.1」,「localhost」,「0.0.0.0」,「+」和「*」似乎可以在Windows上運行,當我在Ubuntu上使用Mono時,專門添加使用主機名或接口IP地址的前綴。請注意,使用IP地址時,它必須是綁定到接口的IP地址,而不是任何可能映射到的公用外部IP地址。

相關問題