Question

Je suis en train d'écrire une application d'entreprise utilisant les services WCF et NetTCP. Au départ, j’ai choisi NetTCP par curiosité, mais j’ai par la suite décidé que c’était la meilleure option pour moi, car je peux avoir des services appelés nécessitant plus de 5 heures pour obtenir des résultats en raison de la quantité de données traitées.

La façon dont je génère mes services est un processus en plusieurs étapes. J'ai un élément de configuration (à l'aide de System.Configuration) qui spécifie certains éléments par défaut (numéro de port, nom du serveur pour les clients qui se connectent, l'activation de HTTP ainsi que de NetTCP, etc.) et qui contient une collection de & " ; services " dessous. Par exemple, voici à quoi ressemble un élément de base:

<serverConfiguration tcpListenerPortNumber="60000" httpGetEnabled="true" httpListenerPortNumber="6000" serverName="localhost" retryEnabled="true" retryInterval="5" maxRetryAttempts="3">
    <services>
        <add virtualDirectory="Service1" applicationName="Service1" assembly="SampleService" type="SampleService.Service1" />            
    </services>
</serverConfiguration>

En gros, ce qui se passe ici, c’est que mon service Windows démarre et examine tout ce qui se trouve dans < services / > La collecte et la création d'un thread par service accélèrent le démarrage. Chaque thread contient un AppDomain où le service vit réellement. Par conséquent, si un service présente une défaillance quelconque, il ne met pas le système hors tension.

Le ". problème " Je cours dans cette application héberge environ 20 services et il faut environ 15 à 20 secondes pour que tous les services soient opérationnels. J'ai utilisé les éléments de thread et AppDomain pour obtenir cette valeur (cela prenait plus d'une minute, chaque service étant ouvert séquentiellement), mais il me semble toujours que cela pourrait en réalité aller beaucoup plus vite.

Quelqu'un a des suggestions? Google Bing a une pléthore d'exemples pour l'hébergement d'un service, mais je ne trouve pas grand chose pour des applications du monde réel (malheureusement! & "Bonjour le monde &"; n'est tout simplement pas attrayant pour les utilisateurs finaux). Si vous hébergez actuellement plusieurs services via un service Windows et NetTCP, comment procédez-vous?

Était-ce utile?

La solution

Je l’ai enfin compris et cela n’avait rien à voir avec WCF ou mes éléments de configuration après tout. Lorsque je créais AppDomain, j’ai volé le code d’un autre projet dont la taille était beaucoup plus petite et j’ai constaté que la section créant AppDomains utilisait l’option SingleDomain. Si vous le changez en MultiDomain, le temps passera à & Gt; 4 secondes pour la charge totale et l'utilisation de la mémoire passera de ~ 150 Mo à ~ 150 Mo.

Merci de votre aide - au moins, cela m'a permis de revoir le code!

Autres conseils

J'ai trois suggestions:

Premièrement, si un appel peut durer plus de 5 heures, je considérerais une architecture de style file d'attente / rappel.

Envisagez de scinder vos services en 20 services Windows, où chaque service s'exécute dans ses propres services Windows. Cela ajoute à la complexité et augmente l'utilisation de la mémoire, mais un service individuel peut être disponible plus rapidement.

Enfin, recherchez le code inutile dans le programme du développeur du service.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top