DarkBlog

Aller au contenu | Aller au menu | Aller à la recherche

dimanche 17 février 2019

WCF: Prise en charge des wildcard sur IIS10 et plus

IIS 10 apporte le support des domaines en * (wildcard). Cela dis WCF ne le supporte pas!
Nous avions un service WCF hébergé sur un site sur IIS (dans un CloudService Azure pour être précis) et ce site avait des hostname type "lille.monsite.com ; paris.monsite.com ; lyon.monsite.com …".

Voici donc notre configuration initiale (qui était donc valide)
image

Ayant un certificat SSL de type wildcard *.monsite.com, nous avons adapté la configuration pour permettre au site de répondre sur *.monsite.com et avons retiré les anciens hostname. En faisant ceci, le service WCF est tombé en erreur HTTP 500 !
image
image

Pour faire simple : notre service n’arrive pas a se charger, plus précisément il n’arrive pas a charger sa configuration de binding.

Après avoir cherché, nous avons découvert que WCF ne supporte pas les host header de type wildcard : https://blogs.msdn.microsoft.com/dsnotes/2017/07/07/wcf-support-for-wild-card-host-header-at-iis-10-and-above/

Pour corriger ce problème : nous avons ajouté un header fictif "localhost" en premier dans la liste. L'astuce ici est de permettre au service de se charger en utilisant le header localhost. Pour autant, il répondra bien aux requêtes type "maville.monsite.com"! Attention, ce header “non wildcard” doit être en premier dans la liste sinon le service WCF ne se chargera pas!

Voici donc la configuration :
image
et le résultat :

image

WCF: Support of wildcard on IIS10 and more

IIS 10 brings support for wildcard domains. However WCF does not support it!
We had a WCF service hosted on IIS (in an Azure CloudService to be more specific) and this website had hostname like "lille.monsite.com ; paris.monsite.com ; lyon.monsite.com …".

Here is the original configuration (was working as expected)
image

Having a wildcard SSL certificate *.monsite.com, we adapted the configuration to allow the website to respond to *.monsite.com and removed old hostnames. Doing this, the WCF service fails with an HTTP 500 error !
image
image

To make it simple : our service cannot load anymore, more precisely it cannot load its' binding configuration.

After some research, we found that WCF does not support host header of wildcard type : https://blogs.msdn.microsoft.com/dsnotes/2017/07/07/wcf-support-for-wild-card-host-header-at-iis-10-and-above/

To fix the problem : we added a fake header "localhost" at top of the header list. The trick here is to allow the service to load using this localhost header. Still, it will nicely respond to queries like "mycity.monsite.com"! Warning, this “non wildcard header” has to be first in the list to make the WCF service to load properly!

Here is the configuration :
image
and the result :

image