Silverlight Async Timeout Error

2019-01-26 05:11发布

Calling through to my Silverlight Enabled WCF-Service in my silverlight application, occasionally users get timeouts. Whats the easiest way to boost the time allowed by the service client for a response?

The exact exception thrown is: System.TimeoutException: [HttpRequestTimedOutWithoutDetail]

Thanks

5条回答
ら.Afraid
2楼-- · 2019-01-26 06:00

Rather than changing the timeout, I think you should implement a timer-based callback to the server from the Silverlight application so that the session doesn't expire. This would eliminate the overhead of longer timeouts for all of your application.

查看更多
干净又极端
3楼-- · 2019-01-26 06:02

This can be set in the node of the ServiceReference.ClientConfig file in the silverlight app.

查看更多
乱世女痞
4楼-- · 2019-01-26 06:08

The accepted answer here did not work for me. Instead I had to cast the base channel into an IContextChannel, and set the OperationTimeout on that.

To do that, I had to create a new file with a partial class, that matched the name of the ServiceReference. In my case the I had a PrintReportsService. Code is below.

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;
        }


    }
}

Then when I create the client, I do the following:

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

That did it for me! More info is available here, but the code snippet in this post doesn't compile.

查看更多
干净又极端
5楼-- · 2019-01-26 06:11

I fixed this by enabling compatibility mode in IE

查看更多
贼婆χ
6楼-- · 2019-01-26 06:14

This can be set, but there is an upper limit that is defined by the underlying HTTP library (I think its five minutes). Note that using a higher value will fall back to what the upper limit is. Also, be aware that you may need to configure the timeout on the server as well.

查看更多
登录 后发表回答