2011-09-20 2 views
20

Qual è esattamente la differenza tra gli elementi bindingConfiguration e bindingName in un elemento endpoint WCF? La ragione per cui chiedo è che sto creando un endpoint che usa basicHttpBinding e SSL. Ho configurato il web.config in questo modo:bindingConfiguration vs bindingName

<basicHttpBinding> 
<binding name="basicHttps"> 
    <security mode="Transport"> 
    <transport clientCredentialType="None"/> 
    </security> 
</binding> 

<endpoint binding="basicHttpBinding" bindingConfiguration="basicHttps" contract="Hsp.Services.Interface.Catalog.ICatalogService" address="" /> 

Tuttavia, quando si utilizza bindingConfiguration quindi https non sta funzionando. Quando cambio bindingConfiguration in bindingName, funziona come previsto. Quindi, qual è esattamente la differenza tra i due?

risposta

22

L'attributo binding= solo definisce, che vincolante (protocollo) che si desidera - basicHttpBinding, wsHttpBinding, netTcpBinding ecc

Quegli attacchi hanno tutti valori predefiniti di sistema - se non si specifica alcuna configurazione vincolante, quei valori predefiniti di sistema sarà usato.

Quello che hai definito nel tuo <bindings> sezione del vostro config è una configurazione vincolante - una serie di parametri per la rilegatura di scelta che verrà utilizzato al posto delle impostazioni predefinite del sistema.

Così il binding= e la necessità bindingConfiguration= per abbinare - non si può definire un legame (ad esempio basicHttpBinding), ma poi assegnare una configurazione vincolante per un diverso vincolante.

Che comunque non spiega perché il tuo https non funziona - questo deve essere un altro problema. Puoi approfondire un po 'di più? Come funziona non funziona? Nessuna risposta o errore (in tal caso: , che cos'è l'errore ??)

7

Il bind di configurazione servizio non è corretto. Pertanto, quando si fa riferimento correttamente alla configurazione di binding utilizzando l'attributo bindingConfiguration, il servizio non funziona. Quando si utilizza l'attributo bindingName, che è un attributo utilizzato non valido nel tuo caso, il servizio avvia appena una BasicHttpBinding senza guardare la configurazione personalizzata, che sembra funzionare correttamente.

Per il diverso tra i due elementi: http://msdn.microsoft.com/en-us/library/ms731320.aspx.

Quindi, utilizzare l'attributo bindingConfiguration è l'unica cosa corretta. Ora abbiamo ancora bisogno di vedere cosa c'è di sbagliato nella configurazione del binding stesso :-) Vedere il seguente esempio per estrarre le informazioni rilevanti da.

<system.web.extensions> 
    <scripting> 
    <webServices> 
     <authenticationService enabled="true" 
     requireSSL = "true"/> 
    </webServices> 
    </scripting> 
</system.web.extensions> 
<system.serviceModel> 
    <services> 
    <service name="System.Web.ApplicationServices.AuthenticationService" 
     behaviorConfiguration="AuthenticationServiceTypeBehaviors"> 
     <endpoint contract= 
     "System.Web.ApplicationServices.AuthenticationService" 
     binding="basicHttpBinding" 
     bindingConfiguration="userHttps" 
     bindingNamespace="http://asp.net/ApplicationServices/v200"/> 
     </service> 
    </services> 
    <bindings> 
     <basicHttpBinding> 
      <binding name="userHttps"> 
       <security mode="Transport" /> 
      </binding> 
     </basicHttpBinding> 
    </bindings> 
    <behaviors> 
    <serviceBehaviors> 
     <behavior name="AuthenticationServiceTypeBehaviors"> 
     <serviceMetadata httpGetEnabled="true"/> 
     </behavior> 
    </serviceBehaviors> 
    </behaviors> 
    <serviceHostingEnvironment 
    aspNetCompatibilityEnabled="true"/> 
</system.serviceModel> 

Vedere http://msdn.microsoft.com/en-us/library/bb398990.aspx per ulteriori dettagli.

8

Da the MSDN documentation

bindingConfiguration: Una stringa che specifica il nome di legame del legame da utilizzare quando il punto finale viene creata un'istanza. Il nome del bind deve essere in ambito nel punto in cui è definito l'endpoint. L'impostazione predefinita è una stringa vuota. Questo attributo viene utilizzato insieme al binding per fare riferimento a una specifica configurazione di binding nel file di configurazione. Imposta questo attributo se stai tentando di utilizzare un'associazione personalizzata.Altrimenti, può essere generata un'eccezione.

bindingName: una stringa che specifica il nome univoco qualificato dell'associazione per l'esportazione della definizione tramite WSDL. L'impostazione predefinita è una stringa vuota.

Non ho mai utilizzato bindingName, ma sembra influire solo sul WSDL generato per l'endpoint. Se qualcosa non funziona quando si utilizza bindingConfiguration="basicHttps", sembra che si sia verificato un errore di configurazione che impedisce il corretto funzionamento (se non è specificato bindingConfiguration, verranno applicate le impostazioni predefinite, ovvero ciò che accade quando si modifica bindingConfiguration in bindingName). Non credo che <transport clientCredentialType="None"/> sia valido, i valori possibili sono Basic, Certificate, Digest, Windows o NTLM. Vedere Transport Security Overview

+0

"il valore predefinito è una stringa vuota" - Ho modificato il mio valore predefinito in una stringa vuota e tutto ha funzionato :-) – GlennG

0

bindingConfiguration Una stringa che specifica il nome di legame del legame da utilizzare quando il punto finale viene creata un'istanza. Il nome del bind deve essere in ambito nel punto in cui è definito l'endpoint. L'impostazione predefinita è una stringa vuota.

Questo attributo viene utilizzato insieme al collegamento per fare riferimento a una specifica configurazione di associazione nel file di configurazione. Imposta questo attributo se stai tentando di utilizzare un'associazione personalizzata. Altrimenti, può essere generata un'eccezione.

bindingName Una stringa che specifica il nome qualificato univoco dell'associazione per l'esportazione della definizione tramite WSDL. L'impostazione predefinita è una stringa vuota.