2014-01-21 171 views
1

我正在使用Visual Studio 2012生成要由winforms客戶端使用的Web服務。我使用「添加服務引用」創建了客戶端。這個winforms客戶端是一個.net c#替換舊的VB 6應用程序。此前,在VB應用程序有超時值,包括外部設置如下:爲WCF web服務設置DNS超時

DNS超時 連接超時 請求超時

端點主機地址是FQDN迫使DNS查詢時,DNS超時會工作。此處的超時值會限制等待DNS解析的時間量。

連接超時會限制winforms客戶端等待建立到服務器的http連接的時間。 DNS查找會成功。

請求超時會限制http連接成功後等待請求返回的時間量。如果在Web服務調用啓動後長時間運行的查詢耗時過長,這將會起作用。

在.net 4.0中是否有類似於上面的內容。我希望能夠在app.config中配置它。我知道下面。

<bindings> 
    <basicHttpBinding> 
    <binding name="IncreasedTimeout" 
     openTimeout="12:00:00" 
     receiveTimeout="12:00:00" closeTimeout="12:00:00" 
     sendTimeout="12:00:00"> 
    </binding> 
    </basicHttpBinding> 

這些可以映射到我需要的還是它確實無關緊要?

感謝

回答

1

OpenTimeout設置爲WCF綁定的時間打開通道時等待的長度,所以我相信這將是類似於舊的連接超時。這應該很快,所以你通常只想指定幾秒鐘等待(30或更少),而不是12小時。

WCF CloseTimeout用於發送Close Channel消息時,這是等待確認的時間。這在舊的架構中可能沒有相同之處。再次,這應該是快速的,應該只需要幾秒鐘。

WCF SendTimeout(用於客戶端配置)本質上涵蓋了客戶端將消息發送到服務以及接收響應(如果有)的時間。這將對應於您的舊請求超時。這可能需要幾分鐘,如果你的服務器需要一段時間來處理事情。

WCF SendTimeout(用於服務器配置)適用於需要回調的情況,以便服務器知道等待接收回調的確認需要多長時間。

WCF ReceiveTimeout不適用於客戶端配置。對於服務器端配置的ReceiveTimeout所使用的ServiceFramework層初始化會話的空閒超時(說實話,我真的不知道那是什麼)

這MSDN的討論可能會有所幫助http://social.msdn.microsoft.com/Forums/vstudio/en-US/84551e45-19a2-4d0d-bcc0-516a4041943d/explaination-of-different-timeout-types?forum=wcf

作爲最後說明,除非你確實有很長時間的運行請求,否則超時值真的不是一個好主意。這是因爲如果客戶端未正確關閉連接,則可能會耗盡服務器上的可用資源。

+0

看起來像DNS超時將是OpenTime的一部分。我認爲這樣會好的。無論如何,我無法控制DNS查找,因爲我無法控制這些服務器。 –

+0

SendTimeout是主要的,我可以將它設置得非常低,並觸發超時異常。 OpenTime我設置得很低,但從未觸發超時異常。 –

+0

這也是我的經驗。我爲OpenTimeout使用了30秒,但是我可能應該使用5或10,因爲我讀過的文獻說,在像我這樣的封閉環境中,通道的打開和關閉應該更像是一秒或更短。但我總是寧願給自己一點緩衝。 – DeanOC