Проблемы времени ожидания служб Silverlight 4 Ria - PullRequest
0 голосов
/ 02 февраля 2011

Я звоню из моего клиента Silverlight в мой DomainService, что обычно занимает около 2 минут. Мне нужно увеличить значение тайм-аута конечной точки до 5 минут, чтобы быть безопасным, но, похоже, оно игнорирует настройку, и я не могу понять, почему. Вот как я создаю свой DomainContext в моем клиенте:

MyDomainContext context = new MyDomainContext();
((WebDomainClient<MyDomainContext.IMyDomainServiceContract>)context.DomainClient).ChannelFactory.Endpoint.Binding.ReceiveTimeout = new TimeSpan(0, 5, 0);
context.Search(_myParms, p =>
    {
      if (p.HasError)
      {
        // Handle errors
      }

       // Should take about 2 min. to get here, but times out before          
     }, null);

Я пытался установить оба параметра: ReveiveTimeout и SendTimeout, но всегда получаю ошибку ровно через 1 минуту.

Может кто-нибудь сказать мне, что я делаю не так?

РЕДАКТИРОВАТЬ: Это точная ошибка, которую я получаю:

{System.Net.WebException: удаленный сервер возвратил ошибку: NotFound. ---> System.Net.WebException: удаленный сервер возвратил ошибку: NotFound. в System.Net.Browser.BrowserHttpWebRequest.InternalEndGetResponse (IAsyncResult asyncResult) в System.Net.Browser.BrowserHttpWebRequest. <> c_ DisplayClass5.b _4 (объект sendState) в System.Net.Browser.AsyncHelper. <> c_ DisplayClass2.b _0 (объект sendState) --- Конец внутренней трассировки стека исключений --- в System.Net.Browser.AsyncHelper.BeginOnUI (SendOrPostCallback beginMethod, состояние объекта) в System.Net.Browser.BrowserHttpWebRequest.EndGetResponse (IAsyncResult asyncResult) в System.ServiceModel.Channels.HttpChannelFactory.HttpRequestChannel.HttpChannelAsyncRequest.CompleteGetResponse (результат IAsyncResult)}

Я также проверил, чтобы убедиться, что это не то, что у меня на службе. В настоящее время у меня просто есть служба, запускающая цикл while. Я снова получаю эту ошибку ровно через одну минуту.

Спасибо

-Скотт

Ответы [ 3 ]

2 голосов
/ 02 февраля 2011

Вы должны реализовать частичный метод OnCreated () класса MyDomainContex.

Пример:

public partial class TestDomainContext
{
    partial void OnCreated()
    {
        var proxy = (WebDomainClient<Test.Server.Services.TestDomainContext.ITestDomainServiceContract>)this.DomainClient;
        proxy.ChannelFactory.Endpoint.Binding.SendTimeout = new TimeSpan(0, 5, 0);
    }
1 голос
/ 20 октября 2011

Эта проблема является одной из основных проблем в Silverlight.

Я предпочитаю метод расширения для чего-то подобного, а не создание деликатных частичных классов.

См. Решение здесь: http://blogs.msdn.com/b/kylemc/archive/2010/11/03/how-to-change-the-request-timeout-for-wcf-ria-services.aspx

если вы используете призму, вы можете выполнить инъекцию следующим образом:

_unityContainer.RegisterType<SurveyModuleContext>(new InjectionFactory(c => CreateSurveyContext()));



    private object CreateSurveyContext()
    {
        var context = new SurveyModuleContext();
        context.ChangeWcfSendTimeout(new TimeSpan(0, 10, 0));
        return context;
    }


public static class DomainContextExtensions
{
    public static void ChangeWcfSendTimeout(this DomainContext context,
                                            TimeSpan sendTimeout)
    {
        PropertyInfo channelFactoryProperty =
          context.DomainClient.GetType().GetProperty("ChannelFactory");
        if (channelFactoryProperty == null)
        {
            throw new InvalidOperationException(
              "There is no 'ChannelFactory' property on the DomainClient.");
        }

        ChannelFactory factory = (ChannelFactory)channelFactoryProperty.GetValue(context.DomainClient, null);
        factory.Endpoint.Binding.SendTimeout = sendTimeout;
    }
}

На этом снимке экрана видно, что решение действительноРабота.(2 м 1 с) вызов

using firebug network request and response 2m 1s.

0 голосов
/ 02 февраля 2011

Может ли быть тайм-аут запроса в веб-приложении на стороне сервера, на котором размещена служба домена?Проверьте настройки веб-приложения, в котором работает служба, или пула приложений.

...