bindingConfiguration与bindingName

时间:2011-09-20 20:33:18

标签: wcf wcf-binding

WCF端点元素中bindingConfiguration和bindingName元素之间究竟有什么区别?我问的原因是我正在创建一个使用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 个答案:

答案 0 :(得分:23)

binding=属性只定义了您想要的绑定(协议) - basicHttpBindingwsHttpBindingnetTcpBinding等。

这些绑定都具有系统默认值 - 如果您未指定任何绑定配置,则将使用这些系统默认值。

您在配置的<bindings>部分中定义的是绑定配置 - 您将使用而不是选择绑定的一组参数系统默认

所以 binding= bindingConfiguration= 需要匹配 - 您无法定义一个绑定(例如basicHttpBinding)但是为不同的绑定分配绑定配置。

然而,这仍然无法解释为什么你的https不起作用 - 这必定是其他一些问题。你能详细说明一下吗?它是如何不起作用的?只是没有回复,或者你得到错误(如果是这样的话:那是什么错误 ??)

答案 1 :(得分:8)

来自the MSDN documentation

bindingConfiguration :一个字符串,指定在实例化端点时要使用的绑定的绑定名称。绑定名称必须在定义端点的范围内。默认值为空字符串。此属性与绑定结合使用,以引用配置文件中的特定绑定配置。如果您尝试使用自定义绑定,请设置此属性。否则,可能会抛出异常。

bindingName :一个字符串,它指定通过WSDL导出定义的绑定的唯一限定名称。默认值为空字符串。

我从未使用过bindingName,但它似乎只会影响为您的端点生成的WSDL。如果使用bindingConfiguration="basicHttps"时某些内容无法正常工作,那么听起来您的配置错误导致其无法正常工作(如果未指定bindingConfiguration,则会应用默认值,这就是正在发生的事情当您将bindingConfiguration更改为bindingName时)。我认为<transport clientCredentialType="None"/>无效,可能的值包括Basic,Certificate,Digest,Windows或NTLM。见Transport Security Overview

答案 2 :(得分:7)

您的服务配置绑定不正确。因此,当您使用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

答案 3 :(得分:0)

<强> bindingConfiguration 一个字符串,指定在实例化端点时要使用的绑定的绑定名称。绑定名称必须在定义端点的范围内。默认值为空字符串。

此属性与绑定结合使用,以引用配置文件中的特定绑定配置。如果您尝试使用自定义绑定,请设置此属性。否则,可能会抛出异常。

<强> bindingName 一个字符串,它指定通过WSDL导出定义的绑定的唯一限定名称。默认值为空字符串。