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