Comment corriger "n'a pas pu trouver une adresse de base qui correspond au schéma http" ... dans WCF

j'essaie de déployer un service WCF sur mon serveur, hébergé dans IIS. Naturellement cela fonctionne sur ma machine :)

Mais quand je le déployer, j'obtiens l'erreur suivante:

<!-Cette collection contient déjà adresse avec le http scheme. Il peut y être au plus une adresse par stratagème en cette collecte.

googler sur ceci, je trouve que je dois mettre un élément serviceHostingEnvironment dans le web.config fichier:

<serviceHostingEnvironment>
  <baseAddressPrefixFilters>
    <add prefix="http://mywebsiteurl"/>
  </baseAddressPrefixFilters>
</serviceHostingEnvironment>

mais une fois que j'ai fait cela, j'obtiens ce qui suit:

N'a pas pu trouver une adresse de base qui correspond au protocole http pour le paramètre avec reliure BasicHttpBinding. Les schémas d'adresse de base enregistrés sont les suivants: [http.]

il semble qu'il ne sache pas quelle est l'adresse de base, mais comment puis-je la spécifier? Voici la section pertinente de mon web.fichier de configuration:

<system.serviceModel>
  <serviceHostingEnvironment>
    <baseAddressPrefixFilters>
      <add prefix="http://mywebsiteurl"/>
    </baseAddressPrefixFilters>
  </serviceHostingEnvironment>

  <behaviors>
    <serviceBehaviors>
      <behavior name="WcfPortalBehavior">
        <serviceMetadata httpGetEnabled="true"/>
        <serviceDebug includeExceptionDetailInFaults="true"/>
      </behavior>
    </serviceBehaviors>
  </behaviors>
  <bindings>
    <basicHttpBinding>
      <binding name="BasicHttpBinding_IWcfPortal"
               maxBufferSize="2147483647" maxReceivedMessageSize="2147483647"
               receiveTimeout="00:10:00" sendTimeout="00:10:00"
               openTimeout="00:10:00" closeTimeout="00:10:00">
        <readerQuotas maxBytesPerRead="2147483647" maxArrayLength="2147483647"
               maxStringContentLength="2147483647"/>
      </binding>
    </basicHttpBinding>
  </bindings>

  <services>
    <service behaviorConfiguration="WcfPortalBehavior" name="Csla.Server.Hosts.Silverlight.WcfPortal">
      <endpoint address="" binding="basicHttpBinding" contract="Csla.Server.Hosts.Silverlight.IWcfPortal"
      bindingConfiguration="BasicHttpBinding_IWcfPortal">
      </endpoint>
      <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
    </service>
  </services>
</system.serviceModel>

quelqu'un Peut-il faire la lumière sur ce qui se passe et comment résoudre ce problème?

34
demandé sur Kiquenet 2009-05-16 14:34:25

9 réponses

essayez de changer le mode de sécurité de "Transport" à "aucun".

      <!-- Transport security mode requires IIS to have a
           certificate configured for SSL. See readme for
           more information on how to set this up. -->
      <security mode="None">
41
répondu dale 2015-01-16 22:49:29

y a-t-il une chance que votre IIS soit configuré pour Exiger SSL sur les connexions à votre site/application?

4
répondu tomasr 2009-05-16 17:26:05

si vous voulez utiliser baseAddressPrefixFilters dans web.la configuration, vous devez installer IIS (6). Ce qui m'a aidé:

1/ dans IIS trouver votre site. 2 / propriétés / site Web (onglet) / adresse IP - > bouton Avancé 3 / Ajouter un nouvel en-tête host sur le même port que vous utiliserez dans web.config.

4
répondu LiborBes 2010-05-12 17:01:34

j'ai dû faire deux choses à la configuration IIS du site / application. Ma question avait à faire avec obtenir le net.tcp de travail dans un Site Web IIS Application:

le Premier:

  1. clic droit sur le nom de L'application IIS.
  2. Gérer Le Site Web
  3. Paramètres Avancés
  4. définir les protocoles autorisés pour être " http, net.tcp"

Deuxième:

  1. sous le menu Actions sur le côté droit du Gestionnaire, cliquez Les fixations...
  2. Cliquez Sur Ajouter
  3. modifier le type pour " net.tcp"
  4. définir les informations de liaison à {ouvrir le numéro de port}:*
  5. OK
4
répondu ZaChickster 2011-07-21 20:14:30

seule la première adresse de base de la liste sera reprise (venant de IIS). Vous ne pouvez pas avoir plusieurs adresses de base par schéma avant .NET4.

2
répondu Ákos 2011-09-07 13:49:05

la solution est de définir une liaison personnalisée à l'intérieur de votre Web.Le fichier de configuration et définissez le mode de sécurité de "Transport". Ensuite, vous avez juste besoin d'utiliser la propriété bindingConfiguration à l'intérieur de votre définition d'endpoint pour pointer vers votre fixation personnalisée.

Voir ici: Blog de Scott: WCF les Liaisons Nécessaires Pour HTTPS

1
répondu fiberOptics 2012-06-24 04:18:10

Si elle est hébergée sur IIS, il n'est pas nécessaire de spécifier une adresse de base, il sera l'adresse du répertoire virtuel.

0
répondu Philippe 2009-05-18 09:36:20

il devrait y avoir un moyen de résoudre ce problème assez facilement avec des sections de configuration externes et une étape de déploiement supplémentaire qui laisse tomber un déploiement externe spécifique .fichier de configuration dans un emplacement connu. Nous utilisons généralement cette solution pour gérer les différentes configurations de serveurs pour nos différents environnements de déploiement (Staging, QA, production, etc.) avec notre "dev box" étant la valeur par défaut si aucune copie spéciale ne se produit.

0
répondu Eric Willeke 2010-03-19 02:50:54

à confirmer ma correction:

dans votre web.fichier de configuration, vous devez le configurer pour regarder comme tel:

<system.serviceModel >
    <serviceHostingEnvironment configSource=".\Configurations\ServiceHosting.config" />
    ...

ensuite, construisez une structure de dossier qui ressemble à ceci:

/web.config
/Configurations/ServiceHosting.config
/Configurations/Deploy/ServiceHosting.config

La base serviceHosting.config devrait ressembler à ceci:

<?xml version="1.0"?>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true">
    <baseAddressPrefixFilters>
    </baseAddressPrefixFilters>
</serviceHostingEnvironment>

tandis que celui de /Déployer ressemble à ceci:

<serviceHostingEnvironment aspNetCompatibilityEnabled="true">
    <baseAddressPrefixFilters>
        <add prefix="http://myappname.web707.discountasp.net"/>
    </baseAddressPrefixFilters>
</serviceHostingEnvironment>

au-delà de cela, vous devez ajouter une étape de déploiement manuel ou automatisé pour copier le fichier à partir /déployer overtop celui dans /Configurations. Cela fonctionne incroyablement bien pour l'adresse de service et les chaînes de connexion, et économise l'effort de faire d'autres solutions de rechange.

si vous n'aimez pas cette approche (qui s'adapte bien aux fermes, mais est plus faible sur une seule machine), vous pourriez envisager d'ajouter une toile.fichier de configuration un niveau à partir du déploiement du service sur la machine de l'hôte et y placer le noeud servicehostingenvironnement. Ça devrait tomber en cascade pour toi.

0
répondu Eric Willeke 2010-03-19 03:48:39