Affichage des articles dont le libellé est WCF. Afficher tous les articles
Affichage des articles dont le libellé est WCF. Afficher tous les articles

IIS Multi host header et service WCF

Si plusieurs host headers sont déclarés dans une application web au niveau IIS et si l’on veut accéder à un service wcf voici l’erreur que l’on reçoit :

This collection already contains an address with scheme http.  There can be at most one address per scheme in this collection.
Parameter name: item

Une erreur pas très explicite, j’ai passé une bonne heure la dessus, pour faire fonctionner le service on peut soit declarer le host “principal” dans la section service dans web.config soit utiliser cette autre méthode que je préfere :

Au niveau du fichier svc, faire la déclaration suivante :

<%@ ServiceHost Service="MyService" Factory="MyServiceHostFactory" %>

puis créer une classe MyServiceHostFactory dont le but sera d’intercepter la requête et de filtrer les différents hosts pour n’en renvoyer qu’un seul.

public class MyServiceHostFactory : ServiceHostFactory



{



    protected override ServiceHost CreateServiceHost(Type serviceType, Uri[] baseAddresses)



    {



        var addresses = new Uri[] { baseAddresses[0] };



        var serviceHost = new ServiceHost(serviceType, addresses);



        return serviceHost;



    }



}


Comment obtenir le host d’un service WCF hébergé avec IIS

 

dans le cas d’un service wcf hébergé, System.Web.HttpContext.Current retourne null, il n’est donc pas possible de passer par lui pour obtenir la valeur du host, voici ci-dessous une methode pour y parvenir.

var serviceHost = System.ServiceModel.OperationContext.Current.InstanceContext.Host;
var baseAddress = serviceHost.BaseAddresses.First();
var host = baseAddress.AbsoluteUri.Replace(baseAddress.LocalPath, "");