WCF/Silverlight: CommunicationException après période d'inactivité
Bonjour,
Je travaille actuellement avec Silverlight et WCF.
Côté serveur, j'ai une classe pour mon service:
Code:
1 2 3 4 5
| [AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
public class MyService : IMyService
{
public void DoSomething() {... }
} |
L'interface IMyService étant définie comme ceci:
Code:
1 2 3 4 5
| public interface IMyService
{
[OperationContract]
void DoSomething();
} |
Côté client, j'ai ajouté une référence de service dans mon plugin Silverlight; ce qui a pour effet de générer le "proxy" qui va être utilisé:
Code:
1 2 3
| MyServiceClient proxy = new MyServiceClient(GetBinding(), GetEndPoint());
proxy.DoSomethingCompleted += Blablabla...
proxy.DoSomethingAsync(); |
GetBinding() renvoie simplement un BasicHttpBinding créé avec BasicHttpSecurityMode.None.
GetEndPoint() le point de terminaison pour se connecter au service.
Rien de bien méchant jusqu'ici.
D'autant plus que tout fonctionne bien. L'appel au service aucun problème, il répond bien, sans erreur...
Mais où qu'il est le problème alors me diriez vous.
Et bien voilà: Si l'utilisateur laisse son navigateur avec l'application ouverte pendant un certain temps (environ 1 heure semble t'il) sans rien faire, lorsqu'il retravaille avec, dès qu'un appel au service est effectué, une exception CommunicationException se produit.
Il peut continuer à naviguer dans l'application tant qu'il n'y a pas d'intéraction avec le serveur; mais dès qu'une tentative d'appel au service est faite, l'application ne fonctionne plus, il faut la relancer.
Voilà quelques précisions du problème:
- Les sessions Timeout de IIS et dans le web.config on déjà été paramétrées à 8 heures: le problème ne vient pas de là. De plus, j'ai une autre application Silverlight sur ce serveur, et aucun problème de TimeOut. Le problème se produit également lorsque j'ai mon projet en local attaché au débuggeur de Visual Studio.
- Côté serveur, j'ai un EndPoint personnalisé me permettant une gestion d'erreur.
- Lors de l'erreur, le proxy est bien instancié, mais lors de l'appel de la méthode MahcinAsync(), l'application passe directement dans le callback MachinCompleted() avec une erreur:
Citation:
aucune connexion avec le service côté serveur n'est établie. CommunicationException: Server not found.
- J'utililise Silverlight 3.0/WCF/Framework3.5sp1
Donc ma question est simple: pourquoi mon application n'est plus capable de communiquer avec le serveur après une longue période d'inactivité ?
Merci de votre aide.
Ishida