亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

使用Task.Wait和Cancel解決Remoting超時Timeout

系統 1885 0

Remoting 客戶端用 TcpChannel 鏈接服務端的時候,如果地址不存在會嘗試連接到超時Timeout大概21秒左右,例如連接到"tcp:// 192.192.192.192 :8080/ServerObject"這個不存在的Remoting service地址。如何才能縮短這個 Remoting 超時Timeout的時間呢?根據 MSDN Channel Properties 說明: 默認的timeout設置 是infinite(無限),默認失敗嘗試次數/retryCount是一次。所以很自然,設置 Remoting 客戶端用 TcpChannel 鏈接服務端的連接超時timeout在timeout參數里面,代碼是這樣的:

使用Task.Wait和Cancel解決Remoting超時Timeout問題_第1張圖片

接下來的代碼就是調用instance的方法(IMyServiceContract里面定義的)。

可是測試發現設置的timeout參數沒起作用,超時還是21秒。

后來網上搜了一下,的確這是個普遍的問題,看看 這個 這個 帖子,但可惜都沒有解決我的問題。網上都沒有好的辦法,無奈我只好自己搞定了。用.NET 4.0 TPL里面的 Task.Wait(timeSpan) 和cancel搞定。

使用Task.Wait和Cancel解決Remoting超時Timeout問題

先看看下面的代碼:

使用Task.Wait和Cancel解決Remoting超時Timeout問題_第2張圖片

我想你一定看懂了,意思就是,線程池啟動一個線程,做一些事情(這里假設耗時4秒),但必須在超時時間timeout時間內(這里是3秒)內完成,timeout時間到了就取消該線程任務,并返回false。如果操作在3秒內完成了,那么久返回true。很簡單吧。

:這里用了 CancelationTokenSource.Cancel ()來取消線程任務,并且結合TPL里面的 Task.Wait(timeSpan) ,這樣實現timeout時間到了就取消該線程任務。請參考MSDN: Task Cancelation How to: Cancel a Task and Its Children . 細節:如果僅僅調用bool Wait(TimeSpan timeout),時間到了并不會停止任務執行,而是等待任務執行完成,看所用時間如果超過timespan就返回false,否則返回true。)

這個方法就是用來測試一個遠程地址是否可用,比如連接到"tcp:// 192.192.192.192 :8080/ServerObject"這個不存在的Remoting service地址,如果能在timeout時間內(例如3秒內)返回,那么測試成功。超過就是失敗的服務端地址。可以在上面do some task的地方放置你的耗時操作,例如 Activator.GetObject 或者 instance.dosomething() - 一定要用try-catch括起來哦。

需要注意ChannelServices.UnRegisterChannel

有一點需要注意 ChannelServices.UnregisterChannel ,如果放在try-catch的那個block里面的話可能不工作,沒有效果,看下面的代碼:

使用Task.Wait和Cancel解決Remoting超時Timeout問題_第3張圖片

原因是如果連接到"tcp:// 192.192.192.192 :8080/ServerObject"這個不存在的Remoting service地址,可能會在Activator.GetObject 或者 instance.dosomething()這一步出現connection failed的異常,提示遠程remoting服務器連接不上,然后就走到catch里面調用了 ChannelServices.UnregisterChannel 了嗎?沒有,還有retryCount,失敗重試,所以實際并沒有執行注銷channel。

正確的解決方法是在其他地方,或者過一會兒再調用 ChannelServices.UnregisterChannel 。或者在我上述的函數測試一個遠程地址是否可用TestRemotingServerAddress調用完成以后,如果是false,就調 ChannelServices.UnregisterChannel 。此外,如果endpoint地址改變了,需要調用 ChannelServices.UnregisterChannel ,否則會發生異常。

使用Task.Wait和Cancel解決Remoting超時Timeout問題


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 女孕学护士一级毛片 | 精品伊人久久久久7777人 | 国产在线视频精品视频免费看 | 国产成人精品高清在线观看99 | 亚洲欧美二区三区久本道 | 99久久99久久久精品齐齐鬼色 | 亚洲精品图| 国产在线自在拍91精品黑人 | 亚洲视频在线免费观看 | 不卡免费视频 | 欧美不卡视频在线 | 中文字幕亚洲精品第一区 | 中文字幕天天躁夜夜狠狠综合 | 日日躁夜夜躁狠狠天天 | 九九成人 | 九九精品免费 | 青青青草视频在线观看 | 久久国产精品2020盗摄 | 日本精品高清一区二区不卡 | 99爱视频免费高清在线观看 | 亚洲精品欧美日本中文字幕 | 国产一区福利 | 四虎午夜剧场 | 麻豆久久婷婷综合五月国产 | 曰曰鲁夜夜免费播放视频 | 美女视频91| 亚洲国产成人资源在线软件 | 亚洲高清免费 | 五月网婷婷 | 在线观看国产一区亚洲bd | 97理论三级九七午夜在线观看 | 99久久精品免费看国产高清 | 国产四虎 | 久久美女精品国产精品亚洲 | 二级毛片| 六月色婷婷 | 欧美日韩一区二区在线观看视频 | 久久国产精品国语对白 | 国产亚洲欧洲国产综合一区 | 99视频全部免费 | 精品久久免费视频 |