Partage
  • Partager sur Facebook
  • Partager sur Twitter

[WCF]Application et IIS incompatibles?

Sujet résolu
    7 février 2012 à 13:07:02

    Bonjour à vous,

    Le contexte



    Depuis quelques temps déjà, j'ai, pour projet de stage, de faire un applicatif serveur en WCF, une application en Silverlight et refondre un site web.

    Si les deux premiers éléments sont terminés et fonctionnel, je rencontre quelques difficultés à réaliser le 3eme.

    En effet, pour la phase de test, l'applicatif serveur est configuré pour gérer les requêtes lancées sur http://sousdomaineservice.domaine.fr/MySvc.svc (et d'autres URL mais toutes ayant pour base http://sousdomaineservice.domaine.fr).

    Le site web quant à lui, hébergé dans IIS, est configuré pour répondre sur http://sousdomaine.domaine.fr.

    Mais tout n'est pas rose



    Le problème...C'est que parmi les multiples services WCF de l'applicatif serveur, il y en a qui casse tout.

    Après recherche, j'ai pu remarquer ce qui n'allait pas : en utilisant la commande "netsh http show servicestate", j'ai pu remarquer que IIS est bien enregistré sur l'URL http://sousdomaine.domaine.fr:80...Mais que l'applicatif serveur est enregistré sur http://+:80 au lieu de http://sousdomaineservice.domaine.fr:80 :colere: !!

    Résultat : Toutes les requêtes vers le serveur de test sur le port 80 sont dirigées vers l'applicatif serveur!! Du coup, quand je cherche à accéder au site en utilisant http://sousdomaine.domaine.fr, j'ai une belle page qui me dit que les métadonnées de service ne sont pas publiées, en lieu et place du site web.

    The question


    Est-ce que quelqu'un, dans cette assemblée, sait comment configurer la pile HTTP noyau d'un système Windows pour associer correctement des URL à un applicatif?


    J'ai déjà fait pas mal de recherche sur le sujet...Malheureusement, les mots clés utilisés me font toujours tomber sur des articles du style "Comment enregistrer une application pour un protocole personnalisé?".

    Si quelqu'un a une solution...Ce serait juste magique :D

    Edit : Suivant cet article, il semblerait bien qu'on puisse associer un applicatif à une URL spécial (puisque IIS et SQL Server le font)...Reste plus qu'a trouver comment.

    Edit-2 :

    Problème résolu


    Après avoir trouvé la documentation sur l'API HTTP Window et fait de nombreuses cogitation sur "Comment marche WCF? Comment marche IIS? Quels sont leurs points communs? Quels sont les trucs qui pourraient être utilisés dans l'API HTTP par l'un ou l'autre?", j'étais d'abord parti sur l'usage par PInvoke des fonctions de l'API pour changer les paramètres de la file de traitement qui m'est allouée lorsque qu'on lance les services WCF de mon applicatif serveur.

    En approfondissant un peu plus les recherches sur la configuration des services WCF via le fichier de configuration, j'ai trouvé tout un tas de truc relatif aux noms d'hôte. Le problème venait effectivement d'un défaut de configuration.

    Lorsqu'on fait une appli IIS WCF, le problème ne se présente pas (ou peu) car IIS configure pour nous un niveau de fichier de configuration pour faire une concordance exacte entre le nom d'hôte désiré par l'application et les paquets entrants.

    Or, dans une application WCF self-hosted, la méthode de concordance des noms d'hôte par défaut est "StrongWildcard"; soit "tout ce qui rentre sur le port correct et respectant le schéma de service choisi (par exemple : port 80, schéma HTTP) est redirigé vers l'application".

    Il suffit alors de configurer la concordance des nom d'hôte pour être exacte (hostNameComparisonMode="Exact") sur les méthodes de liaisons utilisées et tout devient de suite plus fonctionnel :D :
    <!-- pour un binding HTTP modifié : -->
    <webHttpBinding>
       <clear />
       <binding name="securedPolicy" hostNameComparisonMode="Exact">
       </binding>
    </webHttpBinding>
    
    <!-- pour un custom binding : -->
    <customBinding>
       <binding name="securedDuplex" sendTimeout="00:00:40" receiveTimeout="04:00:00">
           <binaryMessageEncoding />
           <pollingDuplex duplexMode="MultipleMessagesPerPoll" maxPendingSessions="2147483647" maxPendingMessagesPerSession="2147483647" inactivityTimeout="04:00:00" serverPollTimeout="00:00:10" />
           <httpTransport transferMode="StreamedResponse" hostNameComparisonMode="Exact"/>
       </binding>
       <binding name="securedSimplex" sendTimeout="00:00:40" receiveTimeout="04:00:00">
          <reliableSession inactivityTimeout="04:00:00" />
          <textMessageEncoding />
          <httpTransport transferMode="Buffered" hostNameComparisonMode="Exact"/>
       </binding>
    </customBinding>
    


    Par ailleurs, dans le doute, j'ai également forcé l'URI d'écoute sur chacun de mes services en copiant le contenu de l'attribut "address" dans l'attribut "listenUri" de chacun de mes éléments "endpoint".

    :pirate:
    • Partager sur Facebook
    • Partager sur Twitter

    [WCF]Application et IIS incompatibles?

    × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
    × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
    • Editeur
    • Markdown