Bienvenue à Blogs CodeS-SourceS Identification | Inscription | Aide

Atteint de JavaScriptite Aiguë [Cyril Durand]

Expert ASP.net Ajax et WCF, Cyril Durand parle dans son blog de point techniques sur ASP.net, ASP.net Ajax, JavaScript, WCF et .net en général. Cyril est également consultant indépendant, n'hésitez pas à le contacter pour de l'assistance sur vos projets

Actualités

  • Blog de Cyril DURAND, passionné de JavaScript, Ajax, ASP.net et tout ce qui touche au developpement Web Client-Side.

    N'hésitez pas à me contacter pour vos projets .net : architecture, accompagnement, formation, ...

    View Cyril Durand's profile on LinkedIn
    hit counters


    Expertise Commerce server et BizTalk

WCF – “Ajax-enabled WCF Service” ne peut pas avoir plusieurs bindings - “Cette collection contient déjà une adresse avec le schéma http.”

Afin de communiquer avec le serveur depuis le client en JavaScript, il est possible d’utiliser un “Ajax-enabled WCF Service”. Il s’agit d’un service WCF classique qui possède un binding et un behavior personnalisé afin de générer du JSON.

Si votre site web possède plusieurs binding il se peut que vous soyez face à ce problème.

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

ou en français

Cette collection contient déjà une adresse avec le schéma http. Une adresse tout au plus par schéma est possible dans cette collection.

Mais tout d’abord, quand est-ce que notre site web utilisera plusieurs bindings ? C’est le cas lorsque vous configurez un seul site web au niveau de IIS pour plusieurs urls. Par exemple si vous avez un site web accessible via

image

Ce problème est assez bien connu sur le net, il existe 2 bidouilles.

La première est de rajouter l’url dans le fichier de configuration :

<serviceHostingEnvironment> <baseAddressPrefixFilters> <add prefix="http://www.mydomain.com"/> </baseAddressPrefixFilters> </serviceHostingEnvironment>

La seconde est de créer un ServiceHostFactory personnalisé

public class CustomHostFactory : ServiceHostFactory { protected override ServiceHost CreateServiceHost(Type serviceType, Uri[] baseAddresses) { return base.CreateServiceHost(serviceType, new Uri[]{ baseAddresses[0]}); } }

<%@ ServiceHost Language="C#" Debug="true" Service="DataService" CodeBehind="~/App_Code/DataService.cs" Factory="CustomHostFactory" %>

Malheureusement ces 2 bidouilles permettent de faire fonctionner le service seulement pour un domaine. Cela pose des soucis car à partir d’un appel AJAX il n’est pas possible de faire des requêtes crossdomain.

Afin de remonter le problème à Microsoft, j’ai recherché le bug sur connect : Feedback : Can't host WCF service in a website with multiple identities. Celui-ci est en état “Closed (By design)” ! Microsoft ne nous indique aucune piste afin de résoudre ce souci.

Ne me satisfaisant pas de cette solution, j’ai testé d’autres bidouilles. J’ai réussit à faire fonctionner le service avec plusieurs bindings en créant un ServiceHostFactory personalisé qui consiste à créer manuellement les ServiceEndpoint.

// use this class with caution ! // it's a workaround for this bug // https://connect.microsoft.com/wcf/feedback/ViewFeedback.aspx?FeedbackID=322896 public class CustomHostFactory : ServiceHostFactory { protected override ServiceHost CreateServiceHost(Type serviceType, Uri[] baseAddresses) { // a valid url is required ServiceHost host = new ServiceHost(serviceType, new Uri[] { baseAddresses[0] }); // manually create endpoint for each uri - ignore WCF config file for (int i = 0; i < baseAddresses.Length; i++) { WebHttpBinding webHttpBinding = new WebHttpBinding(); ServiceEndpoint endpoint = host.AddServiceEndpoint(serviceType, webHttpBinding, baseAddressesIdea); endpoint.Behaviors.Add(new WebScriptEnablingBehavior()); } return host; } }

Cette solution n’est pas idéale puisqu’elle ne prend pas en compte la configuration WCF stocké dans le fichier de configuration, cependant cela me permet de faire fonctionner mon service WCF sur 2 URLs distinct.

Si vous avez d’autres astuces ou informations à ce problème, je suis preneur.

N’oublier pas de voter pour ce bug si vous rencontrez ce soucis : Feedback : Can't host WCF service in a website with multiple identities

Posted: dimanche 19 avril 2009 20:22 par cyril
Ce post vous a plu ? Ajoutez le dans vos favoris pour ne pas perdre de temps à le retrouver le jour où vous en aurez besoin :

Commentaires

Pas de commentaires

Les commentaires anonymes sont désactivés

Les 10 derniers blogs postés

- Office 365: Comment créer un jeu de Pages Modernes dans un Modern Site SharePoint Online en utilisant PowerShell depuis un fichier CSV par Blog Technique de Romelard Fabrice le 10-17-2018, 12:50

- Office 365: Comment Utiliser les Modern Pages dans un Site Intranet SharePoint basé sur le Publishing site par Blog Technique de Romelard Fabrice le 10-16-2018, 15:34

- Office 365: Comment changer le nom “Auteur” dans les pages modernes d'un Modern Site SharePoint Online par Blog Technique de Romelard Fabrice le 10-16-2018, 15:07

- Reprise des articles Codes-Sources de 2011 à 2013 par Blog de Jérémy Jeanson le 08-21-2018, 16:08

- Office 365: Modifier les jeux de couleur dans les Thèmes des pages classiques de SharePoint Online par Blog Technique de Romelard Fabrice le 08-08-2018, 17:27

- Office 365: Modifier les jeux de couleur dans les Thèmes des pages modernes de SharePoint Online par Blog Technique de Romelard Fabrice le 07-04-2018, 13:26

- Office 365: Script PowerShell pour fixer le Quota Warning de toutes les collections d’un tenant par Blog Technique de Romelard Fabrice le 07-03-2018, 14:16

- MVP Award 2018-2019 par Blog de Jérémy Jeanson le 07-02-2018, 20:39

- Reprise des articles de 2014 à aujourd’hui par Blog de Jérémy Jeanson le 06-20-2018, 13:00

- Office 365: Comment créer un sous-plan dans Office 365 Planner par Blog Technique de Romelard Fabrice le 06-14-2018, 17:19