web-dev-qa-db-fra.com

bindingConfiguration vs bindingName

Quelle est exactement la différence entre les éléments bindingConfiguration et bindingName dans un élément de point de terminaison WCF? La raison pour laquelle je pose cette question est que je crée un terminal qui utilise basicHttpBinding et SSL. J'ai configuré le web.config comme ceci:

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

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

Cependant, lorsque vous utilisez bindingConfiguration, alors https ne fonctionne pas. Lorsque je modifie bindingConfiguration en bindingName, cela fonctionne comme prévu. Alors, quelle est exactement la différence entre les deux?

20
devlife

L'attribut binding= définit simplement la liaison (protocole) souhaitée - basicHttpBinding, wsHttpBinding, netTcpBinding etc.

Ces liaisons ont toutes des valeurs système par défaut. Si vous ne spécifiez aucune configuration de liaison, ces valeurs système par défaut seront utilisées.

Ce que vous avez défini dans votre section <bindings> de votre config est une configuration binding - un ensemble de paramètres pour votre liaison de choix qui sera utilisée au lieu des valeurs par défaut du système

Ainsi, lebinding=et lebindingConfiguration=doivent correspondre - vous ne pouvez pas définir une liaison (par exemple, basicHttpBinding), mais affecter une configuration de liaison pour une autre liaison.

Cependant, cela n'explique toujours pas pourquoi votre https ne fonctionne pas - ce doit être un autre problème. Pouvez-vous élaborer un peu plus? Comment ça marche ne fonctionne pas ? Juste pas de réponse, ou obtenez-vous une erreur (si oui: quelle est cette erreur ??)

23
marc_s

Depuis la documentation MSDN

bindingConfiguration: Chaîne spécifiant le nom de la liaison à utiliser lorsque le noeud final est instancié. Le nom de la liaison doit être dans la portée au moment où le noeud final est défini. La valeur par défaut est une chaîne vide. Cet attribut est utilisé conjointement avec une liaison pour faire référence à une configuration de liaison spécifique dans le fichier de configuration. Définissez cet attribut si vous essayez d'utiliser une liaison personnalisée. Sinon, une exception peut être levée.

bindingName: Chaîne spécifiant le nom qualifié unique de la liaison pour l'exportation de la définition via WSDL. La valeur par défaut est une chaîne vide.

Je n'ai jamais utilisé bindingName, mais cela ne semble affecter que le WSDL généré pour votre point de terminaison. Si quelque chose ne fonctionne pas lorsque vous utilisez bindingConfiguration="basicHttps", il semblerait qu'une mauvaise configuration l'empêche de fonctionner correctement (si aucune variable bindingConfiguration n'est spécifiée, les valeurs par défaut seront appliquées, ce qui correspond à ce qui se produit lorsque vous remplacez bindingConfiguration par bindingName. Je ne pense pas que <transport clientCredentialType="None"/> soit valide, les valeurs possibles sont Basic, Certificate, Digest, Windows ou NTLM. Voir Vue d'ensemble de la sécurité des transports

8
Joel C

Votre liaison de configuration de service est incorrecte. Ainsi, lorsque vous faites correctement référence à votre configuration de liaison à l'aide de l'attribut bindingConfiguration, votre service ne fonctionne pas. Lorsque vous utilisez l'attribut bindingName, qui est un attribut utilisé non valide dans votre cas, le service commence simplement un basicHttpBinding sans examiner votre configuration personnalisée, qui semble fonctionner correctement.

Pour les différences entre les deux éléments, consultez: http://msdn.Microsoft.com/en-us/library/ms731320.aspx .

Donc, utiliser l'attribut bindingConfiguration est la seule chose à faire. Nous devons maintenant examiner ce qui ne va pas avec votre configuration de liaison elle-même :-) Reportez-vous à l'exemple suivant pour extraire vos informations pertinentes.

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

Voir http://msdn.Microsoft.com/en-us/library/bb398990.aspx pour plus de détails.

7
kroonwijk

bindingConfiguration Chaîne spécifiant le nom de la liaison à utiliser lorsque le noeud final est instancié. Le nom de la liaison doit être dans la portée au moment où le noeud final est défini. La valeur par défaut est une chaîne vide.

Cet attribut est utilisé conjointement avec une liaison pour faire référence à une configuration de liaison spécifique dans le fichier de configuration. Définissez cet attribut si vous essayez d'utiliser une liaison personnalisée. Sinon, une exception peut être levée.

bindingName Chaîne spécifiant le nom qualifié unique de la liaison pour l'exportation de la définition via WSDL. La valeur par défaut est une chaîne vide.

0
Sonu Rajpoot