Подтвердить что ты не робот

BindingConfiguration vs bindingName

В чем именно заключается разница между элементами 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, он работает так, как ожидалось. Итак, что же такое разница между двумя?

4b9b3361

Ответ 1

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

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

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

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

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

Ответ 2

Из документации MSDN

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

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

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

Ответ 3

Неверная привязка конфигурации службы. Поэтому, когда вы правильно ссылаетесь на свою конфигурацию привязки, используя атрибут bindingConfiguration, ваша служба не работает. Когда вы используете атрибут bindingName, который является недопустимым используемым атрибутом в вашем случае, служба просто запускает 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.

Ответ 4

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

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

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