2008-12-01 86 views
13

調用我的Silverlight在我的Silverlight應用程序中啓用WCF服務,偶爾用戶會超時。提高服務客戶端響應時間的最簡單方法是什麼?Silverlight異步超時錯誤

拋出確切的例外是:System.TimeoutException:[HttpRequestTimedOutWithoutDetail]

感謝

回答

12

這可以在Silverlight應用程序的ServiceReference.ClientConfig文件的節點中設置。

+0

默認值和例如:http://msdn.microsoft.com/en-us/library/ms731361.aspx – Entrodus 2013-05-31 07:19:02

1

這可以設置,但有一個由底層HTTP庫(我認爲它的五分鐘)定義的上限。請注意,使用較高的值將回落到上限值。另外,請注意,您可能還需要在服務器上配置超時。

0

而不是改變超時,我認爲你應該實現從Silverlight應用程序到服務器的基於計時器的回調,以便會話不會過期。這將消除所有應用程序的更長超時的開銷。

4

這裏接受的答案不適合我。相反,我不得不將基礎通道投入IContextChannel,並在其上設置OperationTimeout。

要做到這一點,我必須創建一個帶有部分類的新文件,該文件與ServiceReference的名稱相匹配。在我的情況下,我有一個PrintReportsService。代碼如下。

using System; 
using System.Net; 
using System.Windows; 
using System.Windows.Controls; 
using System.Windows.Documents; 
using System.Windows.Ink; 
using System.Windows.Input; 
using System.Windows.Media; 
using System.Windows.Media.Animation; 
using System.Windows.Shapes; 

namespace RecipeManager.PrintReportsService 
{ 
    public partial class PrintReportsClient : System.ServiceModel.ClientBase<RecipeManager.PrintReportsService.PrintReports>, RecipeManager.PrintReportsService.PrintReports 
    { 
     public void SetOperationTimeout(TimeSpan timeout) 
     { 
      ((System.ServiceModel.IContextChannel)base.Channel).OperationTimeout = timeout; 
     } 


    } 
} 

然後,當我創建客戶端,我做到以下幾點:

 PrintReportsService.PrintReportsClient client = new RecipeManager.PrintReportsService.PrintReportsClient(); 
     client.SetOperationTimeout(new TimeSpan(0, 4, 0)); 

這爲我做!有更多的信息可用here,但這篇文章中的代碼片段不能編譯。

1

我在IE固定這通過使兼容模式