2010-09-28 11 views
0

J'ai un service compatible duplex dans lequel les clients s'enregistrent pour recevoir des notifications. Dans le même AppPool, j'ai un autre service Web régulier qui est utilisé par les clients pour communiquer avec le serveur. Envoyer quelque chose à ce service Web déclenchera une notification à tous les clients connectés. Tout fonctionne bien jusqu'à 12, 13 ou plus de clients sont connectés. Ensuite, l'abonnement/la réception avec le canal duplex et l'envoi de quelque chose à l'autre service deviennent beaucoup plus lents. J'ai désactivé la compatibilité avec asp.net et je n'ai pas de fichier global.asax dans mon projet de service web qui pourrait déclencher des sessions pour le ralentir.Les services Web ne répondent plus lorsque plusieurs clients sont connectés à l'aide de la liaison duplex d'interrogation

Mes services Web sont hébergés dans IIS7 sur Windows Server 2008. Veuillez noter que mes clients exécutent SL4 mais que les services Web sont hébergés dans .NET 3.5.

Voici quelques extraits de mon fichier web.config:

<bindingExtensions> 
<add name="pollingDuplexHttpBinding" type="System.ServiceModel.Configuration.PollingDuplexHttpBindingCollectionElement,System.ServiceModel.PollingDuplex, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />  </bindingExtensions> 



<pollingDuplexHttpBinding> 
    <binding name="pollingDuplexHttpBindingConfig"/> 
    </pollingDuplexHttpBinding> 



<service name="WcfDuplexService.NotificationService" 
      behaviorConfiguration="ServiceBehavior"> 
          <!-- Service Endpoints --> 
          <endpoint address="" 
       binding="pollingDuplexHttpBinding" 
       bindingConfiguration="pollingDuplexHttpBindingConfig" 
       contract="WcfDuplexService.INotificationService" 
       behaviorConfiguration="ServiceFullEndpointBehavior"> 
          </endpoint> 
          <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/> 
        </service> 




<!-- Message Service --> 
    <service name="WcfDuplexService.MessageService" 
      behaviorConfiguration="ServiceBehavior"> 
    <endpoint binding="customBinding" 
       bindingNamespace="http://csintra.net/MessageService" 
       contract="WcfDuplexService.IMessageService" 
       bindingConfiguration="binaryHttpBinding" 
       behaviorConfiguration="ServiceFullEndpointBehavior"> 
     <identity> 
     <dns value="localhost" /> 
     </identity> 
    </endpoint> 
    <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" /> 
    </service> 


<serviceBehaviors> 
          <behavior name="ServiceBehavior"> 
     <serviceThrottling maxConcurrentCalls="1024" maxConcurrentSessions="1024" maxConcurrentInstances="1024" /> 
     <!-- To avoid disclosing metadata information, set the value below to false and remove the metadata endpoint above before deployment --> 
     <serviceMetadata httpGetEnabled="true"/> 
     <!-- To receive exception details in faults for debugging purposes, set the value below to true. Set to false before deployment to avoid disclosing exception information --> 

     <serviceDebug includeExceptionDetailInFaults="true"/> 
    </behavior> 
        </serviceBehaviors> 

Merci à l'avance.

Répondre

0

nous avons eu le même problème il y a longtemps.

tout semble bien ce que vous venez de décrire, sauf vos configurations. vous n'avez pas spécifié le délai d'inactivité, les délais d'attente ouverts/fermés dans votre configuration de liaison pour le service. veuillez les définir en conséquence. vous pouvez vérifier le msdn pour ce qui fonctionne avec vous.

essayez une seule instance à la fois. mais avec plusieurs modèles de concurrence. après le test de charge, nous avons trouvé une meilleure approche dans notre cas.

Effectuez un test de charge de votre service duplex, vérifiez les compteurs de performance pendant le test de charge, pour voir ce qui se passe sur votre serveur, si la RAM/le processeur rencontre des problèmes. Le processus de travail IIS est-il arrêté? S'il vous plaît vérifiez ces choses.

vous pouvez Google sur le compteur de performance.

Activer le suivi WCF !!! Peut-être y a-t-il des problèmes à l'intérieur desquels il n'y a pas de problème.

Implémentez votre suivi personnalisé dans votre application pour voir ce qui se passe. (facultatif mais très utile dans notre cas.)

Revoyez l'architecture/le design de votre service Duplex. Lire les directives du service duplex WCF Directives de performance sur msdn.

(Très utile)

Faites votre modèle de service multithread activé si vous configurez le mode d'accès simultané = plusieurs et l'instance = 1.

Cordialement,

Mazhar Karimi

+0

Pouvez-vous ajouter un linkg pour 'Guide de performance du service duplex WCF' sur MSDN? – sll