2010-07-21 4 views
0

J'utilise le code suivant dans mon fichier Global.asax.cs:ChannelFactory statique Global.asax.cs jette CommunicationObjectFaultedException

public static readonly IMyCommunicationService GlobalCommunicationChannel = 
     new ChannelFactory<IMyCommunicationService>("NetTcpBinding_IMyCommunicationService").CreateChannel(); 

De tous les sites que je suis le var statique accède « GlobalCommunicationChannel ».

Cela fonctionne très bien jusqu'à présent. Mais parfois, dans l'environnement de production, j'obtiens un CommunicationObjectFaultedException. Il est dit que je ne peux pas utiliser mon objet GlobalCommunicationChannel en tant qu'objet "System.ServiceModel.Channels.ServiceChannel" est en état d'erreur.

Je ne reçois pas plus d'informations que cela. Après quelques minutes, il fonctionne à nouveau. Je ne sais pas pourquoi. Je pense que la connexion est rétablie ou quelque chose comme ça.

Qu'est-ce qui provoque cette erreur?
Y at-il un moyen d'éviter cette erreur à l'avenir sans ajouter un try/catch et une tentative partout?

Merci beaucoup d'avance pour votre réponse!

+0

Quels SessionMode et InstanceContextMode utilisez-vous? – Larsenal

+0

InstanceContextMode = InstanceContextMode.Single, ConcurrencyMode = ModeConcurrence.Multiple. La sécurité des threads est réalisée sur le serveur. Pour autant que je comprenne, je n'ai pas besoin de sécurité de thread sur la fin du client pour le ServiceChannel. – Chris

+0

Mais qu'en est-il de SessionMode? Il se peut que vos sessions ne se terminent pas. – Larsenal

Répondre

0

Vérifiez votre valeur SessionMode:

By default, the value of this property is Allowed, which means that if a client uses a session-based binding with a WCF service implementation, the service establishes and uses the session provided. (source)

Dans votre contrat de service, essayez de régler la session NotAllowed.

[ServiceContract(SessionMode=SessionMode.NotAllowed)] 

By default, the maximum number of sessions a service host accepts is 10. Vous pouvez donc vérifier si votre problème peut être répliqué par rapport à 10 sessions.

+0

Bonjour à nouveau. J'ai essayé, mais maintenant j'obtiens l'erreur suivante: Le contrat n'autorise pas la session, mais la liaison 'NetTcpBinding' ne prend pas en charge Datagram ou n'est pas configuré correctement pour le prendre en charge. – Chris

+0

Je vais essayer [ServiceContract (SessionMode = SessionMode.Required)] à la place. – Chris

+0

Non, cela ne fonctionne pas non plus :( – Chris

Questions connexes