2011-12-06 58 views
0

我使用的綁定NetTcpBinding(通過互聯網),所有併發的東西和maxconnection設置爲高值(4000最大連接,併發,等等),所以節流設置真的很高,事實上從服務器的wcf性能計數器,我可以看到沒有一個併發計數器是滿的,但是...但我經歷了一個超時噩夢描述如下:WCF NetTcpBinding超時問題 - 奇怪的行爲

「超時只是定義了等待服務真正失敗並給出錯誤所需的時間,但修改此超時的值對成功的可能性沒有影響。基本上,在服務請求的第一秒內發生了一些事情,它永遠不會恢復,WCF不會奇蹟般地重試網絡rk連接爲你。很好,有時建立網絡連接並不好。但是,如果您的超時時間爲2小時,則必須等待2個小時,否則它將無法工作,然後它纔會最終確認它不起作用並且會出錯。「

我從上述說明中this thread這正是我遇到的問題

操作員每天做同樣的操作一千次和幾千次,有時他們會超時錯誤,即使他們可以快速執行相同的操作後沒有任何延遲,同時有人正在獲取超時,在與另一個客戶端實例在同一臺計算機上,他們可以進行調用並且速度很快!並且檢查服務器端的錯誤沒有記錄在服務實現中,存儲在數據庫中,所以e方法從來沒有被請求調用過,所以我在調用初始化過程中絕對考慮了一些錯誤,可能是身份驗證,標記化,壓縮或其他層次的錯誤,但是我找不到任何血腥的錯誤消息(也許啓用wcf跟蹤?)。

無論如何,事實是,我們得到了與傳統的ASP客戶端服務器請求一樣的傳統ASP編寫的舊軟件,並且這個問題從未發生,如果我們談論的是同一個互聯網連接,那麼我不得不思考?當出現一些錯誤時,Internet Explorer會讓事情變得神奇嗎? WCF得到了一些我可以設置的隱藏配置來改善這種行爲?我可以說的是,我試圖在WsHttpBinding中配置我們的wcf服務,並且這種超時接縫永遠不會發生,即使我們仍然收到一些錯誤,但即時連接立即釋放,即使連接相當與tcp連接相同,因爲默認情況下wshttpbinding被配置爲keepalive tcp頻道,但我仍然不明白爲什麼與tcp我得到這種超時。

如果有人能幫助我,我會非常感激!

謝謝!

+0

「我們得到了寫在傳統的ASP與正常的HTTP客戶端 - 服務器請求的同舊的軟件」 ......不,你不知道。你可能有一個經典的ASP應用程序,它可以模擬相同的業務流程或不是什麼,但它不是同一個軟件。 ASP和.NET是擁有共同祖先IMO的兩種不同的鳥類。 – Tim

+0

是的,我知道這是不同的軟件,但我的意思是說,通過http請求使用互聯網,沒有任何問題使用瀏覽器作爲互聯網瀏覽器 –

回答

1

這個問題與壞硬件有關,調試真的很困難,而且wireshark(tcp sniffer)的數據包沒有顯示任何特定的錯誤,我們發現了一些tcp-retries,這可能是一個症狀,但實際上數據包只是停留在調制解調器路由器內的某個地方,這是一個電信調制解調器(pirelli gate 2 plus),在更換調制解調器/路由器後,問題完全消失。

無論如何,我們發現wsHttpBinding over http,對於沒有控制權的互聯網連接更可靠,而且您無法確定網站上安裝了哪些硬件。

希望這也能幫助別人:)

0

我們遇到了同樣的問題,但使用WsHTTPBinding。您可以通過在循環中調用相同的操作來模擬上述場景,而無需明確關閉客戶端連接。 爲避免發生此問題,請檢查在每個操作完成時是否明確關閉客戶機連接,否則請求將堆積在服務器上。以client.Close()方式明確關閉客戶端。

這將消除服務器中請求的堆積並提高應用程序的性能。

+0

謝謝你的答覆。其實我正在使用[Castle WCF工具](http://www.castleproject.org/container/facilities/trunk/wcf/index.html),並應該管理連接的關閉,但無論如何我會調查它。 但是假設種姓設施沒有關閉連接,爲什麼你認爲我有時只是出錯,爲什麼不是所有的客戶都遇到同樣的問題? 我也使用tcp嗅探器檢查了打開的tcp連接,並且我看到只有幾個連接仍處於活動狀態,並且每次調用仍然使用該連接。 –