2010-02-09 4 views
3

J'ai une application qui est écrit dans silverlight 3.0. Il utilise les services RIA pour communiquer entre le client et le serveur.services RIA WCF délai d'attente

Ma question ne semble pas être très bien répondu sur le web. Le client communique avec le serveur en utilisant les services RIA, qui utilisent WCF en coulisses. Si la communication prend plus de 60 secondes, il fois avec ce message,

« opération de chargement a échoué pour la requête « ApplyUpgrade ». Le requrest HTTP à 'http://localhost:52403/ClientBin/DatabaseUpgradeTool-Web-UpgradePackageDomainService.svc/binary' a dépassé le délai imparti. Le temps alloué à cette opération peut avoir été une partie d'un délai d'attente plus long.

Mon serveur effectue une mise à niveau de base de données, il est donc valable pour elle de prendre plus de 60 secondes. Probablement double ou triple cela.

J'ai essayé des paramètres comme celui-ci dans le web.config,

<services> 
    <service name="DatabaseUpgradeTool.Web.UpgradePackageDomainService"> 
     <endpoint address="" binding="wsHttpBinding" contract="DatabaseUpgradeTool.Web.UpgradePackageDomainService"></endpoint> 
     <endpoint address="/soap" binding="basicHttpBinding" contract="DatabaseUpgradeTool.Web.UpgradePackageDomainService"></endpoint> 
     <endpoint address="/binary" binding="customBinding" bindingConfiguration="BinaryHttpBinding" contract="DatabaseUpgradeTool.Web.UpgradePackageDomainService"></endpoint> 
    </service> 
    </services> 
<bindings> 
    <customBinding> 
     <binding name="BinaryHttpBinding" 
       receiveTimeout="00:00:10" 
       sendTimeout="00:00:10" 
       openTimeout="00:00:10" 
       closeTimeout="00:00:10"> 
     <binaryMessageEncoding /> 
     <httpTransport keepAliveEnabled="true"/> 
     </binding> 
    </customBinding> 
    </bindings> 

toujours pas de joie. Des idées sur ce qui ne va pas avec ce que j'ai essayé ci-dessus? Je me attends à ce qui précède pour l'amener à délai d'attente dans les 10 secondes, pas 60.

Merci.

+0

Veuillez prendre note de la question mise à jour ci-dessus. J'ai essayé quelques paramètres dans le web.config, mais ils n'ont pas été efficaces. Il pourrait susciter d'autres idées – peter

+0

un coup d'oeil à la [même question] (http://stackoverflow.com/questions/1912762/configuring-the-timeout-for-a-wcf-ria-services-call-from-a -silverlight-3-client) – Timores

Répondre

0

J'ai fait face au même problème, j'ai posté la réponse à cette question ici: Silverlight 4 WCF RIA Service Timeout Problem

Voici la réponse:

Je vais vous expliquer mon contexte et je souhaite que cela fonctionnera pour mon. Je suis sûr à ce sujet.

tout d'abord appeler les services RIA, et en utilisant un contexte de domaine, dans mon exemple:

EmployeeDomainContext context = new EmployeeDomainContext(); 
InvokeOperation<bool> invokeOperation = context.GenerateTMEAccessByEmployee(1, 'Bob'); 
invokeOperation.Completed += (s, x) => 
    {....}; 

Rien de nouveau jusqu'à ici. Et avec cela, je faisais face à chaque fois cette même exception de délai après 1 minute. Je passe beaucoup de temps à essayer de faire face à la façon de changer la définition du délai, j'ai essayé tous les changements possibles dans Web.config et rien. La solution a été:

Créer une CustomEmployeeDomainContext, qui est une classe partielle localizated dans le même chemin d'accès du code généré et cette classe utilisent la méthode de crochet OnCreate pour modifier le comportement de contexte de domaine créé. Dans cette classe, vous devriez écrire:

public partial class EmployeeDomainContext : DomainContext 
{ 
    partial void OnCreated() 
    { 
     PropertyInfo channelFactoryProperty = this.DomainClient.GetType().GetProperty("ChannelFactory"); 
     if (channelFactoryProperty == null) 
     { 
      throw new InvalidOperationException(
       "There is no 'ChannelFactory' property on the DomainClient."); 
     } 

     ChannelFactory factory = (ChannelFactory)channelFactoryProperty.GetValue(this.DomainClient, null); 

     factory.Endpoint.Binding.SendTimeout = new TimeSpan(0, 10, 0); 

    } 
} 

Je me réjouis de vos commentaires.

Questions connexes