2016-11-11 59 views
1

我正在開發一個包含WCF服務和使用該服務的客戶端的解決方案。有時我正在調試服務,有時候是客戶端,有時也是兩者。ClientBase EndPoint綁定SendTimeout ReceiveTimeout:如何在調試時更改

在調試過程中,我得到一個TimeoutException附加信息

附加信息:請求信道超時而00後等待答覆:00:59.9950000。增加傳遞給請求調用的超時值或增加綁定上的SendTimeout值。分配給此操作的時間可能是超時時間的一部分。

原因當然,我的服務器正在等待斷點而不是回答問題。

在調試過程中,我想要更長的超時時間,最好不要爲我的服務客戶端創建一個新的配置,因爲如果這個配置的其他值會發生變化,那麼更改器必須記住創建了一個特殊的調試配置。

我覺得是這樣的:

private IMyServiceInterface CreateServiceChannel() 
{ 
    var myServiceClient = new MyServiceClient(); // reads from configuration file 
    if (Debugger.IsAttached) 
    { 
     // Increase timeouts to enable slow debugging 
     ... 
    } 
    return (IMyServiceInterface)myServiceClient; 
} 

根據MSDN Binding.SendTimeout Property用於別的東西:

的SendTimeout獲取或設置提供了一個寫操作之前完成的時間間隔運輸引起了一個例外。

因此,如果不需要,我寧可不更改此值。

  • SendTimeout真的是最好的超時增加,或者是有什麼像TransactionTimeout,我的問題和收到答案之間的超時?
  • 如何更改超時編程

回答

0

文章All WCF timouts explained指出,確實有類似事務超時:IContextChannel.OperationTimeout

的操作超時,覆蓋了整個服務電話(發送請求,處理它並接收答覆)。換句話說,它從客戶的角度定義了服務調用的最大時間。如果未設置,WCF將使用配置的發送超時初始化操作超時。

這解釋了爲什麼拋出的TimeoutException建議更改發送超時。

但是,它是可以改變的操作超時,不改變發送超時:

var myServiceClient = new MyServiceClient(); // reads from configuration file 

if (Debugger.IsAttached) 
{ // Increase timeouts to enable slow debugging: 
    IContextChannel contextChannel = (IContextChannel)myServiceClient.InnerChannel; 
    // InnerChannel is of type IClientChannel, which implements IContextChannel 

    // set the operation timeout to a long value, for example 3 minutes: 
    contextChannel.OperationTimeout = TimeSpan.FromMinutes(3); 
} 
return (IMyInterface)myService; 
相關問題