2009-10-05 3 views
0

J'ai écrit et déployé une application qui utilise NetTcpBinding pour les communications.WCF Net Tcp Serveur de liaison refusant plus de 5 connexions

J'ai une application serveur qui accepte les demandes d'abonnement des clients, puis envoie les données aux clients.

Le client voit un problème sur le site où une fois que le serveur a 5 clients connectés, il refuse plus.

Quelqu'un at-il déjà vu ce genre de comportement? Est-ce que quelqu'un sait ce qui pourrait causer cela? Cela fonctionne parfaitement pour moins d'utilisateurs. J'ai essayé de diagnostiquer moi-même pour le moment mais je suis nouveau à la WCF alors je me demandais s'il y avait une solution commune à ce genre de problème?

-je obtenir la trace de la pile suivante (Sanitzes pour supprimer le nom du client et le nom du produit):

2009-09-30 13:03:16,308 [1] ERROR [(null)] - Failed to subscribe to the VDN server, there was no server listening for connections at the configured URI 
System.ServiceModel.EndpointNotFoundException: Could not connect to net.tcp://server:4000/VDNService. The connection attempt lasted for a time span of 00:00:01.0312236. TCP error code 10061: No connection could be made because the target machine actively refused it 10.65.1.42:4000. ---> System.Net.Sockets.SocketException: No connection could be made because the target machine actively refused it 10.65.1.42:4000 
    at System.Net.Sockets.Socket.DoConnect(EndPoint endPointSnapshot, SocketAddress socketAddress) 
    at System.Net.Sockets.Socket.Connect(EndPoint remoteEP) 
    at System.ServiceModel.Channels.SocketConnectionInitiator.Connect(Uri uri, TimeSpan timeout) 
    --- End of inner exception stack trace --- 

Server stack trace: 
    at System.ServiceModel.Channels.SocketConnectionInitiator.Connect(Uri uri, TimeSpan timeout) 
    at System.ServiceModel.Channels.BufferedConnectionInitiator.Connect(Uri uri, TimeSpan timeout) 
    at System.ServiceModel.Channels.ConnectionPoolHelper.EstablishConnection(TimeSpan timeout) 
    at System.ServiceModel.Channels.ClientFramingDuplexSessionChannel.OnOpen(TimeSpan timeout) 
    at System.ServiceModel.Channels.CommunicationObject.Open(TimeSpan timeout) 
    at System.ServiceModel.Channels.ServiceChannel.OnOpen(TimeSpan timeout) 
    at System.ServiceModel.Channels.CommunicationObject.Open(TimeSpan timeout) 
    at System.ServiceModel.Channels.ServiceChannel.CallOpenOnce.System.ServiceModel.Channels.ServiceChannel.ICallOnce.Call(ServiceChannel channel, TimeSpan timeout) 
    at System.ServiceModel.Channels.ServiceChannel.CallOnceManager.CallOnce(TimeSpan timeout, CallOnceManager cascade) 
    at System.ServiceModel.Channels.ServiceChannel.EnsureOpened(TimeSpan timeout) 
    at System.ServiceModel.Channels.ServiceChannel.Call(String action, Boolean oneway, ProxyOperationRuntime operation, Object[] ins, Object[] outs, TimeSpan timeout) 
    at System.ServiceModel.Channels.ServiceChannel.Call(String action, Boolean oneway, ProxyOperationRuntime operation, Object[] ins, Object[] outs) 
    at System.ServiceModel.Channels.ServiceChannelProxy.InvokeService(IMethodCallMessage methodCall, ProxyOperationRuntime operation) 
    at System.ServiceModel.Channels.ServiceChannelProxy.Invoke(IMessage message) 

Exception rethrown at [0]: 
    at System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg, IMessage retMsg) 
    at System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 type) 
    at ClientLib.IServer.Subscribe(List`1 groups) 
    at ClientLib.Client.Subscribe(List`1 groupNames) 

Répondre

4

Quelques questions à l'avant:

  • Sur votre côté serveur, ce que vous ne regarde config comme?
  • Sous quel système d'exploitation le serveur s'exécute-t-il? (certaines versions/éditions du système d'exploitation ont des limites)
  • Comment hébergez-vous votre service WCF sur ce serveur? (IIS par rapport à l'auto-hébergement)

Vous pouvez modifier fondamentalement le nombre de connexions simultanées en utilisant le comportement ServiceThrottling, et vous pouvez définir

  • nombre maximum d'appels simultanés
  • nombre maximal de concurrent les sessions (sessions de transport TCP/IP)
  • nombre maximal d'instances de classe de service

Pour configurer, essayez ceci:

<serviceBehaviors> 
    <behavior name="throttledService"> 
     <serviceThrottling 
      maxConcurrentCalls="10" 
      maxConcurrentInstances="10" 
      maxConcurrentSessions="10"/> 
    </behavior> 

et bien sûr, votre configuration de service devra alors faire référence à cette configuration de comportement.

Aucune de ces valeurs par défaut à 5, bien que :-(Mais dans votre cas, j'essayer de monter tous les paramètres à 25 ou quelque chose et juste voir si cela fait une différence, puis modifier vos besoins (et surveiller la CPU du serveur et la charge mémoire)

Marc

MISE à JOUR:
vous pouvez certainement aussi faire cela dans le code - quelque chose comme ça (du côté du serveur, où vous instanciez votre ServiceHost classe!. , si vous êtes votre propre hôte):

using (ServiceHost host = new ServiceHost(typeof(MyWCFService))) 
{ 
    ServiceThrottlingBehavior stb = new ServiceThrottlingBehavior(); 
    stb.MaxConcurrentCalls = 25; 
    stb.MaxConcurrentInstances = 25; 
    stb.MaxConcurrentSessions = 25; 

    host.Description.Behaviors.Add(stb); 

    host.Open(); 

    ... 
} 
+0

Il n'y a pas de fichier de configuration WCF pour cette application car j'ai codé à la main le composant WCF basé sur un tutoriel. Je vais voir s'il existe un moyen de modifier ces variables dans le code. –

+0

La liaison a une propriété MaxConnections que je tente d'essayer. Merci de votre aide. –

+0

OK mais êtes-vous auto-hébergeant (application de la console, service NT) ou l'hébergement dans IIS? –

Questions connexes