2009-12-16 1 views
2

Я использую WCF RIA Services Beta с Silverlight 3.0, и я хочу иметь возможность настроить тайм-аут от клиента. Я знаю, что базовая технология - это WCF, и тайм-аут по умолчанию, по-видимому, составляет 60 секунд, как я ожидал.Настройка таймаута для вызова службы WCF RIA от клиента Silverlight 3

Есть ли простой способ управления этим и другими настройками WCF?

Моя первая мысль попробовать точку крючок DomainContextOnCreated, который был упомянут в RIA Services Обзор PDF-файл, который был доступен до RIA Services собирается бета. Документация MSDN для объекта DomainContext больше не упоминает метод, хотя он все еще существует? Я не уверен, что это случай отставания документации или указание на то, что я не должен использовать эту точку расширяемости.

namespace Example.UI.Web.Services 
{ 
    public sealed partial class CustomDomainContext 
    { 
     partial void OnCreated() 
     { 
      // Try and get hold of the WCF config from here 
     } 
    } 
} 

ответ

3

http://blogs.objectsharp.com/CS/blogs/dan/archive/2010/03/22/changing-timeouts-in-wcf-ria-services-rc.aspx

Либо одна строка после создания контекста домена:

((WebDomainClient<LibraryDomainContext.ILibraryDomainServiceContract>)this.DomainClient).ChannelFactory.Endpoint.Binding.SendTimeout = new TimeSpan(0, 5, 0); 

или частичный класс

public partial class LibraryDomainContext 
{ 
    partial void OnCreated() 
    { 
     if(DesignerProperties.GetIsInDesignMode(App.Current.RootVisual)) 
     ((WebDomainClient<LibraryDomainContext.ILibraryDomainServiceContract>)this.DomainClient).ChannelFactory.Endpoint.Binding.SendTimeout = new TimeSpan(0, 5, 0); 
    } 
} 
+0

Я больше не работаю над этой базой кода, но хорошо знать, что они в конечном итоге разоблачили это. В то время я работал с бета-версией. –

+0

BTW Это не работает с RTM, или, по крайней мере, я не мог понять, как это сделать. –

+1

Вот обновление, работающее с silverlight 4: http://blogs.msdn.com/b/kylemc/archive/2010/11/03/how-to-change-the-request-timeout-for-wcf-ria- services.aspx – Jonx

1

Для справки ниже код почти работает, но вы не можете получить доступ к закрытому члену с помощью отражения в Silverlight. Не был бы рад этому взломать, хотя в любом случае. Интересно отметить, что существует конструктор WebDomainClient, который принимает параметр Binding private WebDomainClient(Uri serviceUri, bool usesHttps, Binding binding), но XML Comment для этого состояния Частный конструктор. Должно быть обнародовано, когда у нас есть сквозная история расширяемости поверх WCF. Похоже, мне придется подождать некоторое время, прежде чем они смогут разоблачить такую ​​конфигурацию.

public sealed partial class AppDomainContext 
{ 
    partial void OnCreated() 
    { 
     var webDomainClient = ((WebDomainClient<AppDomainContext.IAppDomainServiceContract>)this.DomainClient); 
     // Can I use reflection here to get hold of the Binding 
     var bindingField = webDomainClient.GetType().GetField("_binding", BindingFlags.NonPublic | BindingFlags.Instance); 

     // In Silverlight, the value of a private field cannot be access by using reflection so the GetValue call throws an exception 
     // http://msdn.microsoft.com/en-us/library/4ek9c21e%28VS.95%29.aspx 
     var binding = bindingField.GetValue(webDomainClient) as System.ServiceModel.Channels.Binding; 

     // So near yet so far!! 
     binding.SendTimeout = new TimeSpan(0,0,1); 
    } 
} 
+0

Как мы можем настроить его через web.config? –

 Смежные вопросы

  • Нет связанных вопросов^_^