WCF Eccezione: non riusciva a trovare un indirizzo di base che corrisponde al regime di http per l’endpoint

Sto cercando di ospitare un WCF web service su un altro Sito web in IIS con https a 443 è l’unica associazione.

Le seguenti configurazioni funziona bene quando lo uso in un sito web che utilizza entrambe le associazioni (http(80) /https(443)). Se tolgo il binding http, si inizia a diffondere il seguente messaggio di errore.

Non riusciva a trovare un indirizzo di base che corrisponde al regime di http per l’endpoint con l’associazione BasicHttpBinding. Registrati indirizzo di base di schemi di [https].

Come faccio a farlo funzionare in un sito web di IIS con https vincolanti solo?

  <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>
  • modificare il vostro client endpoint https? ad esempio endpoint address="https://localhost/ERPService/retailPayment.svc
  • Che è un altro servizio utilizzato dal servizio. Gira a http. Ho appena pubblicato il full <sistema.serviceModel> sezione config
  • Magari aggiungere <add binding="basicHttpBinding" scheme="http" /> per il <protocolMapping> sezione? Questa è l’impostazione predefinita per WCF (così dovrebbe essere lì a meno che non stai ereditando da un altro file di configurazione), ma potrebbe essere la pena di provare.
InformationsquelleAutor KManohar | 2013-11-11

 

8 Replies
  1. 19

    La tua configurazione dovrebbe essere simile a questo. Si potrebbe cambiare la <transport clientCredentialType="None" proxyCredentialType="None" /> a seconda delle vostre esigenze per l’autenticazione. La config sotto non richiedono alcuna autenticazione.

    <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>

    Che permetterà un servizio WCF con basicHttpBinding per l’utilizzo di HTTPS.

  2. 8

    Il mio problema era causato dalla mancanza di binding in IIS:
    Fare clic destro sul sito > modifica binding > aggiungi > https

    Scegliere “IIS Express Certificato di Sviluppo’ e impostare la porta 443
    Poi ho aggiunto un’altra associazione per il webconfig:

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

    Anche aggiunto serviceBehaviours:
    <serviceMetadata httpGetEnabled="false" httpsGetEnabled="true" />

    E alla fine ha funzionato, nessuna delle soluzioni che ho controllato su stackoverflow per questo errore è applicabile per il mio specifico scenario, quindi, anche nel caso in cui aiuta gli altri

    • Questo è il problema che stavo avendo. La mia config è entrambe le associazioni per HTTP e HTTPS. Ho trovato che il Sito web Predefinito in IIS non includere associazioni per HTTPS. È necessario aggiungere che, se la tua configurazione è endpoint per HTTP e HTTPS.
  3. 7

    Si può ottenere SOLO se si configura https come un sito di legame all’interno di IIS.

    È necessario aggiungere http(80) nonché https(443) – almeno io l’ho fatto 🙂

    • (clic destro su sito web e selezionare Edit Bindings)
    • Appena realizzato che la mia risposta non è una risposta, perché l’interrogante in particolare volevo evitare di fare questo – ma lascio come sembra essere aiutare alcune persone, che deve aver trovato questa domanda tramite il messaggio di errore.
  4. 4

    Ho provato il binding in base alla risposta da @Szymon, ma non ha funzionato per me. Ho provato basicHttpsBinding che è di nuovo in .net 4.5 e risolto il problema. Qui è la configurazione completa che funziona per me.

    <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: la Mia destinazione dell’applicazione di un framework 4.5.1. Sito web di IIS ho creato per distribuire questo servizio wcf ha solo https associazione abilitata.

    • Questo ha funzionato per me. Importante anche garantire che il targetFramework in httpRuntime è impostato di conseguenza cioè <httpRuntime targetFramework=”4.5.1″ />
  5. 1

    Il mio problema è stato causato anche dalla mancanza di associazione https in IIS:
    Selezionata di default del sito > all’estrema destra del riquadro selezionato Associazioni > aggiungi > https

    Scegliere “IIS Express Certificato di Sviluppo’ e impostare la porta 443

  6. 0

    Nel mio caso il nome dell’associazione nell’ambito del protocollo di mappatura non corrisponde al nome dell’associazione sull’endpoint. Corrispondono nell’esempio riportato di seguito.

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

    e

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

    Aprire IIS E fare clic destro su App Predefinita Piscina e Aggiungere Vincolante per rendere il lavoro di applicazione con il protocollo HTTPS.

    tipo : https

    Indirizzo IP : nessuno

    porta : 443

    Certificato SSL : WMSVC

    poi

    Fare clic su e riavviare IIS

    Fatto

Lascia un commento