IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Communication Foundation .NET Discussion :

Ajout dynamique de services


Sujet :

Windows Communication Foundation .NET

  1. #1
    Nouveau membre du Club

    Inscrit en
    Juillet 2009
    Messages
    34
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Juillet 2009
    Messages : 34
    Points : 34
    Points
    34
    Par défaut Ajout dynamique de services
    Bonjour,

    Je réalise actuellement une application fonctionnant de façon modulaire. J'ai un "socle" qui fournit des webservices et différents "modules" qui en fournissent/en consomment.

    Je souhaite pouvoir ajouter des modules "à chaud" à mon application : j'ai donc réalisé une interface utilisateur, on envoit une archive et un fichier de config, le socle reconnait le tout, copie les fichiers sur le serveur et place les fichiers svc au bon endroit pour que le tout fonctionne.

    Le seul problème est que, pour que tout celà fonctionne, il m'est nécessaire d'ajouter au fichier web.config de mon application les parties (en xpath) /configuration/system.serviceModel/services/service et /configuration/system.serviceModel/behaviors/serviceBehaviors/behavior.
    Je ne peux évidemment pas ouvrir bêtement le fichier web.config avec un xmlWriter ou autre car ce dernier est en cours d'utilisation.

    Ma question est : existe-t-il un moyen d'ajouter des éléments à la configuration de mon application de façon définitive (ie : arpès redémarrrage éventuel, ces éléments seront toujours présents). J'ai tenté de chercher sur plusieurs pistes : ajouter des fichiers web.config partiels ou effectuer l'ajout par programmation mais c'est une dead-end dans chaque cas.

    Merci d'avance pour vos réponse,

    /pfellmann

  2. #2
    Rédacteur
    Avatar de Nathanael Marchand
    Homme Profil pro
    Expert .Net So@t
    Inscrit en
    Octobre 2008
    Messages
    3 615
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Expert .Net So@t
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2008
    Messages : 3 615
    Points : 8 080
    Points
    8 080
    Par défaut
    A coeur vaillant, rien d'impossible!
    Je vois pas d'ou viens le problème en fait...
    Voici comment faire:
    Tes points d'entrées de webservices sont les .svc, tu peux les créer dynamiquement, c'est juste une ligne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <%@ ServiceHost Language="C#" Debug="true" Factory="WebApplication1.MyFactory" Service="WebApplication1.Service1Impl" %>
    L'important la dedans c'est ton WebApplication1.MyFactory, cette classe est responsable de l'instantiation et l'hebergement du service.

    Voici un exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    		protected override ServiceHost CreateServiceHost(Type serviceType, Uri[] baseAddresses)
    		{
    			if (serviceType == typeof(Service1Impl))
    			{
    				var binding = new WSHttpBinding(SecurityMode.None);
    				var host = new ServiceHost(serviceType, baseAddresses);
    				host.AddServiceEndpoint(typeof(IService1), binding, "");
    				return host;
    			}
    			else if (serviceType == typeof(Service2Impl))
    			{
    				var binding = new BasicHttpBinding(BasicHttpSecurityMode.None);
    				var host = new ServiceHost(serviceType, baseAddresses);
    				host.AddServiceEndpoint(typeof(IService2), binding, "");
    				return host;
    			}
    			throw new Exception("Unknown type!");
    		}
    Dans cette factory tu peux faire un peu ce que tu veux, récuperer sur un xml comment en fonction du type tu crées ton endpoint, etc.
    Ici comme tu vois, j'ai crée un basichttpbinding si on demande l'url service2.svc ou un wshttpbinding si on me demande l'url service1.svc
    Mettre les configs des services dans le web.config n'est pas une obligation!

    Edit: tu n'es pas obligé de faire une factory commune pour tous tes trucs.
    Tu peux mettre directement le service et sa factory dans ton assembly plugin (laquelle dll devra bien sur être dans le repertoire bin/ de l'appli)

Discussions similaires

  1. [VBA] Ajouter dynamiquement une référence
    Par jpharand dans le forum VBA Access
    Réponses: 23
    Dernier message: 16/04/2010, 23h28
  2. service web avec plugins ajoutés dynamiquement
    Par gerald2545 dans le forum Tomcat et TomEE
    Réponses: 1
    Dernier message: 01/02/2008, 15h17
  3. ajouter dynamiquement des items dans un popup menu
    Par Malone dans le forum Composants VCL
    Réponses: 7
    Dernier message: 23/08/2005, 16h08
  4. Réponses: 2
    Dernier message: 10/05/2005, 15h54
  5. Ajout dynamique d'un contrôle à une fenêtre
    Par Yacine95000 dans le forum MFC
    Réponses: 6
    Dernier message: 08/06/2004, 16h03

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo