2009-12-16 8 views
2

J'utilise le WCF RIA Services Beta avec Silverlight 3.0 et je souhaite pouvoir configurer le délai d'expiration à partir du client. Je sais que la technologie sous-jacente est WCF et le délai d'attente par défaut semble être de 60 secondes comme je m'y attendais.Configuration du délai d'expiration d'un appel WCF RIA Services à partir d'un client Silverlight 3

Existe-t-il un moyen facile de contrôler ce paramètre et d'autres paramètres WCF?

Ma première pensée est d'essayer le DomainContextOnCreated point de crochet qui a été mentionné dans le RIA Services Vue d'ensemble fichier pdf qui était disponible avant RIA Services va bêta. La documentation MSDN pour l'objet DomainContext ne mentionne plus la méthode bien qu'elle soit toujours là? Je ne suis pas sûr si c'est un cas de la documentation à la traîne ou une indication que je ne devrais pas utiliser ce point d'extensibilité.

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

Répondre

3

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

Soit une ligne après la création de contexte de domaine:

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

ou une classe partielle

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

Je ne travaille plus sur cette base de code mais il est bon de savoir qu'ils ont fini par l'exposer. Je travaillais avec la version bêta à l'époque. –

+0

BTW Cela ne fonctionne pas avec RTM, ou du moins je ne pouvais pas comprendre comment. –

+1

Voici une mise à jour fonctionnant avec 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

Pour référence le code ci-dessous près œuvres, mais vous ne pouvez pas accéder à un membre privé utilisant la réflexion dans Silverlight. N'aurait pas été heureux avec ce hack bien que de toute façon. Intéressant de noter qu'il existe un constructeur WebDomainClient qui prend un paramètre de liaison private WebDomainClient(Uri serviceUri, bool usesHttps, Binding binding) mais le commentaire XML pour cela indique Constructeur privé. Devrait être rendu public une fois que nous avons une histoire d'extensibilité de bout en bout au-dessus de WCF. On dirait que je vais devoir attendre un peu avant de pouvoir nous exposer ce genre de configuration.

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

Comment nous pouvons le configurer via web.config? –

Questions connexes