bindingConfiguration против bindingName - PullRequest
       23

bindingConfiguration против bindingName

20 голосов
/ 21 сентября 2011

Какая разница между элементами bindingConfiguration и bindingName в элементе конечной точки WCF?Причина, по которой я спрашиваю, заключается в том, что я создаю конечную точку, которая использует basicHttpBinding и SSL.Я настроил файл web.config следующим образом:

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

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

Однако при использовании bindingConfiguration https не работает.Когда я изменяю bindingConfiguration на bindingName, он работает как положено.Так в чем же разница между ними?

Ответы [ 4 ]

23 голосов
/ 21 сентября 2011

Атрибут binding= просто определяет, какую привязку (протокол) вы хотите - basicHttpBinding, wsHttpBinding, netTcpBinding и т. Д.

Все эти привязки имеют системные значения по умолчанию - если вы неДля указания любой конфигурации привязки будут использоваться эти системные настройки по умолчанию.

То, что вы определили в разделе <bindings> вашей конфигурации, представляет собой конфигурацию привязки - набор параметров для вашеговыбранная привязка, которая будет использоваться вместо системных значений по умолчанию .

Таким образом, binding= и bindingConfiguration= должны совпадать - вы не можете определить одну привязку (например, basicHttpBinding), но затем назначить конфигурацию привязки длядругая привязка.

Это, тем не менее, не объясняет, почему ваш https не работает - это должно быть другой проблемой.Можете ли вы уточнить немного больше?Как это не работает ?Просто нет ответа, или вы получаете сообщение об ошибке (если так: что это за ошибка ??)

8 голосов
/ 21 сентября 2011

С документация MSDN

bindingConfiguration: Строка, указывающая имя привязки привязки, используемой при создании экземпляра конечной точки.Имя привязки должно находиться в области действия в той точке, где определена конечная точка.По умолчанию используется пустая строка.Этот атрибут используется вместе с привязкой для ссылки на конкретную конфигурацию привязки в файле конфигурации.Установите этот атрибут, если вы пытаетесь использовать пользовательскую привязку.В противном случае может быть сгенерировано исключение.

bindingName: строка, указывающая уникальное квалифицированное имя привязки для экспорта определения через WSDL.По умолчанию используется пустая строка.

Я никогда не использовал bindingName, но, похоже, это влияет только на WSDL, сгенерированный для вашей конечной точки.Если что-то не работает, когда вы используете bindingConfiguration="basicHttps", это звучит так, как будто у вас неверная конфигурация, которая мешает его правильной работе (если не указано bindingConfiguration, будут применены значения по умолчанию, что и происходит, когда вы меняете bindingConfiguration до bindingName).Я не думаю, что <transport clientCredentialType="None"/> является допустимым, возможные значения: Basic, Certificate, Digest, Windows или NTLM.См. Обзор безопасности транспорта

7 голосов
/ 21 сентября 2011

Привязка конфигурации вашего сервиса неверна. Поэтому, когда вы правильно ссылаетесь на свою конфигурацию привязки с помощью атрибута bindingConfiguration, ваша служба не работает. Когда вы используете атрибут bindingName, который в вашем случае является недопустимым атрибутом used, служба просто запускает basicHttpBinding, не глядя на вашу пользовательскую конфигурацию, которая, кажется, работает правильно.

Различия между двумя элементами приведены в: http://msdn.microsoft.com/en-us/library/ms731320.aspx.

Таким образом, использование атрибута bindingConfiguration является единственно правильным. Теперь нам все еще нужно взглянуть на то, что не так с самой конфигурацией привязки :-) См. Следующий пример для извлечения соответствующей информации.

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

Подробнее см. http://msdn.microsoft.com/en-us/library/bb398990.aspx.

0 голосов
/ 25 ноября 2015

bindingConfiguration Строка, которая задает имя привязки привязки, используемой при создании экземпляра конечной точки. Имя привязки должно находиться в области действия в той точке, где определена конечная точка. По умолчанию используется пустая строка.

Этот атрибут используется вместе с привязкой для ссылки на конкретную конфигурацию привязки в файле конфигурации. Установите этот атрибут, если вы пытаетесь использовать пользовательскую привязку. В противном случае может быть выдано исключение.

BINDINGNAME Строка, которая указывает уникальное полное имя привязки для экспорта определений через WSDL. По умолчанию используется пустая строка.

...