Question

Je suis en train de configurer des trucs de WCF. À l'heure actuelle, j'ai un serveur qui permet aux utilisateurs distants de télécharger des fichiers et client. Dans le serveur, j'utilise une classe ServiceHost. Je suppose qu'il doit être en cours d'exécution sur un thread séparé, cependant, l'interface utilisateur du serveur (WinForms) est verrouillé lorsque quelqu'un télécharge un fichier. Est-il un moyen de gérer le modèle de thread WCF?

Merci!

Était-ce utile?

La solution 2

"De la même application Windows Form si vous deviez construire l'instance ServiceHost avant de démarrer le thread d'interface utilisateur, il fonctionne sur son propre fil. Cela signifie que les threads de travail attribués à partir des messages de processus de pool de threads au lieu de la boucle de message. Ainsi, , les services peuvent traiter réellement plusieurs requêtes simultanées. «

Autres conseils

Vous devez ajouter un ServiceBehaviorAtttribute à la classe la mise en œuvre de votre service et définissez sa propriété UseSynchronizationContext faux. Cela entraînera des appels à votre service à traiter sur leur propre fil.

Exemple:

[ServiceBehavior(UseSynchronizationContext=false)]
class YourService : IYourService
{
  // Service Methods
}

Rappelez-vous juste que si vous allez mettre à jour les contrôles à l'intérieur de vos méthodes de service, vous devez garder à l'esprit le modèle de programmation multi-fil de Windows Forms .

Vous ne devez pas héberger un service WCF dans un programme d'assurance-chômage. WCF a un modèle de thread très spécifique, qui empêchera votre interface utilisateur de fonctionner bien.

En fait, les changements de régime de filetage WCF en fonction du comportement de gestion de l'instance sélectionnée, et aussi quand il n'y a pas de demandes atteignant le service pendant une période de temps WCF pourrait suspendre le fil en cours d'exécution. Tout cela causera des problèmes avec l'interface utilisateur.

Ce que je fais dans ce cas, est de créer un hébergement Windows service WCF , et créer un ServiceContract pour exposer les données nécessaires à l'interface utilisateur de surveillance. Cette interface se déroulera independtly dans son propre exe, être un autre client du service, la récupération des données du service au besoin.

J'espère donc un sens pour vous.

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