2011-06-02 156 views
2

Sessionful客戶端Binding.CloseTimeout設置爲20秒:爲什麼忽略Binding.CloseTimeout值?

<netTcpBinding> 
    <binding name="NetTcpBinding_IService" closeTimeout="00:00:20" ... 

a)如果服務沒有在當時客戶端調用proxy.Close運行,則客戶端應等待20秒(由於CloseTimeout被設置爲20秒)拋出異常之前,但幾乎立即引發異常:

»套接字連接被中止。這可能是由處理您的消息時出錯或遠程主機超出接收超時或基礎網絡資源問題引起的。本地套接字超時時間爲'00:00:20'。«

爲什麼CloseTimeout值被客戶端忽略?

謝謝

+0

此服務的其他超時設置是什麼? – 2011-06-02 20:12:00

+0

您是否也在服務配置上設置了關閉超時?他們必須是平等的。 – ibram 2011-06-02 20:23:10

回答

2

想象的客戶端和服務器的人,他們在中午的會議。

客戶在中午及時出現。如果服務器不在那裏,客戶立即離開,說「擰它!」 (拋出異常)。

如果服務器在那裏是,它們開始協商(建立連接)。如果會議持續時間少於CloseTimeout,這是因爲他們達成了協議(連接已建立)。如果他們沒有時間參加會議,他們會放棄談判(連接嘗試超時)。

免得你覺得我在做這件事,它是由回答證實this question over on MSDN

EncpointNotFoundException如果服務不能在指定的地址找到通常發生。這個異常將立即拋出。但是,如果找到服務,但會話通道無法在20秒內建立,則會遇到超時錯誤。