web-dev-qa-db-fra.com

Exception WCF: impossible de trouver une adresse de base correspondant au schéma http pour le noeud final

J'essaie d'héberger un service Web WCF sur un site Web distinct dans IIS avec https en 443 comme seule liaison. 

Les configurations suivantes fonctionnent bien lorsque je l’utilise dans un site Web qui utilise les deux liaisons (http (80)/https (443)). Si je supprime la liaison http, il commence à générer l'erreur suivante.

Impossible de trouver une adresse de base correspondant au schéma http pour le noeud final avec la liaison BasicHttpBinding. Les schémas d'adresses de base enregistrés sont [https].

Comment puis-je le faire fonctionner dans un site Web IIS avec une liaison https uniquement?

  <system.serviceModel>
    <bindings>
      <basicHttpBinding>
        <binding name="defaultBasicHttpBinding">
          <security mode="Transport">
            <transport clientCredentialType="None" proxyCredentialType="None" realm=""/>
            <message clientCredentialType="Certificate" algorithmSuite="Default" />
          </security>
        </binding>
      </basicHttpBinding>
    </bindings>
    <client>
      <endpoint address="http://localhost/ERPService/retailPayment.svc"
                binding="basicHttpBinding" bindingConfiguration="defaultBasicHttpBinding"
                contract="RetailPaymentService.RetailPayment.SVRetailPaymentService" name="EnterpriseRetailPayment" />
    </client>
    <behaviors>
      <serviceBehaviors>
        <behavior name="MyServiceTypeBehaviors">
          <serviceMetadata httpGetEnabled="true" />
          <serviceDebug includeExceptionDetailInFaults="true" />
        </behavior>
        <behavior>
          <serviceMetadata httpGetEnabled="true" />
          <serviceDebug includeExceptionDetailInFaults="true" />
        </behavior>
      </serviceBehaviors>
      <endpointBehaviors>
        <behavior name="MyEndPointBehavior">
          <!--<SchemaValidator enabled="true"/>-->
        </behavior>
      </endpointBehaviors>
    </behaviors>
    <services>
      <service name="SettlementSalesCollection.SaleItemService" behaviorConfiguration="MyServiceTypeBehaviors">
        <endpoint behaviorConfiguration="MyEndPointBehavior" binding="basicHttpBinding"
                  name="SettlementSalesCollection"
                  contract="SettlementSalesCollection.CITransactionSettlementListenerService" />
        <endpoint name="mexEndpoint" contract="IMetadataExchange" binding="mexHttpBinding" address="mex" />
      </service>
    </services>
    <extensions>
      <behaviorExtensions>
        <add name="SchemaValidator"
             type="SettlementSalesCollection.SchemaValidation.SchemaValidationBehavior+CustomBehaviorSection, SettlementSalesCollectionService, Version=1.0.0.0, Culture=neutral" />
      </behaviorExtensions>
    </extensions>
    <protocolMapping>
      <add binding="basicHttpsBinding" scheme="https" />
    </protocolMapping>
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" />
  </system.serviceModel>
18
KManohar

Votre configuration devrait ressembler à celle. Vous devrez peut-être modifier <transport clientCredentialType="None" proxyCredentialType="None" /> en fonction de vos besoins en matière d'authentification. La configuration ci-dessous ne nécessite aucune authentification.

<bindings>
    <basicHttpBinding>
        <binding name="basicHttpBindingConfiguration">
            <security mode="Transport">
                <transport clientCredentialType="None" proxyCredentialType="None" />
            </security>
        </binding>       
    </basicHttpBinding>
</bindings>

<services>
    <service name="XXX">
        <endpoint
            name="AAA"
            address=""
            binding="basicHttpBinding"
            bindingConfiguration="basicHttpBindingConfiguration"
            contract="YourContract" />
    </service>
<services>

Cela permettra à un service WCF avec basicHttpBinding d'utiliser HTTPS.

18
Szymon

Mon problème était dû à l'absence de liaisons dans IIS: Cliquez avec le bouton droit de la souris sur le site> modifier les liaisons> ajouter> https.

Choisissez "Certificat de développement IIS Express" et définissez le port sur 443 Ensuite, j'ai ajouté une autre liaison à la commande Web:

<endpoint address="wsHttps" binding="wsHttpBinding" bindingConfiguration="DefaultWsHttpBinding" name="Your.bindingname" contract="Your.contract" />

Également ajouté à serviceBehaviours: <serviceMetadata httpGetEnabled="false" httpsGetEnabled="true" />

Et finalement cela a fonctionné, aucune des solutions que j'ai vérifiées sur stackoverflow pour cette erreur n'était applicable à mon scénario spécifique, donc inclure ici au cas où cela aiderait les autres

8
JsonW

Vous pouvez l'obtenir si vous configurez UNIQUEMENT https en tant que liaison de site dans IIS. 

Vous devez ajouter http(80) ainsi que https(443) - du moins je l'ai fait :-)

6
Simon_Weaver

J'ai essayé la reliure selon la réponse de @Szymon mais cela n'a pas fonctionné pour moi. J'ai essayé basicHttpsBinding qui est nouveau dans .net 4.5 et Il a résolu le problème. Voici la configuration complète qui fonctionne pour moi. 

<system.serviceModel>
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="false" />
    <behaviors>
      <serviceBehaviors>
        <behavior>
          <serviceMetadata httpGetEnabled="false" httpsGetEnabled="true"/>
          <serviceDebug includeExceptionDetailInFaults="true"/>
        </behavior>
      </serviceBehaviors>
    </behaviors>
    <bindings>
      <basicHttpsBinding>
        <binding name="basicHttpsBindingForYourService">
          <security mode="Transport">
            <transport clientCredentialType="None" proxyCredentialType="None"/>
          </security>
        </binding>
      </basicHttpsBinding>
    </bindings>
    <services>
      <service name="YourServiceName">
        <endpoint address="" binding="basicHttpsBinding" bindingName="basicHttpsBindingForYourService" contract="YourContract" />
      </service>
    </services>   
</system.serviceModel>

FYI: Le cadre cible de mon application est 4.5.1. Le site Web IIS que j'ai créé pour déployer ce service wcf a uniquement la liaison https activée.

2
A P

Mon problème était également dû à une liaison https manquante dans IIS: Site Web par défaut sélectionné> Dans le volet de droite à l'extrême, sélectionnez Liaisons> ajouter> https.

Choisissez «Certificat de développement IIS Express» et définissez le port sur 443.

1
Mandi

Dans mon cas, le nom de la liaison dans le mappage de protocole ne correspond pas au nom de la liaison sur le noeud final. Ils correspondent dans l'exemple ci-dessous.

<endpoint address="" binding="basicHttpsBinding" contract="serviceName" />

et

    <protocolMapping>
        <add binding="basicHttpsBinding" scheme="https" />
    </protocolMapping>    
0
housten

Ouvrez IIS et cliquez avec le bouton droit sur Pool d'applications par défaut et sur Ajouter une liaison pour que l'application fonctionne avec le protocole HTTPS.

type: https

Adresse IP: Tous non assignés

numéro de port: 443

Certificat SSL: WMSVC

puis

Cliquez sur et redémarrez IIS

Terminé

0
Prabaldeep Gupta