web-dev-qa-db-ja.com

bindingConfigurationとbindingName

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に変更すると、期待どおりに機能します。それで、2つの違いは正確には何ですか?

20
devlife

binding=属性は、必要なバインディング(プロトコル)を定義するだけです-basicHttpBindingwsHttpBindingnetTcpBindingなど。

これらのバインディングにはすべてシステムのデフォルト値があります。バインディング構成を指定しない場合は、これらのシステムのデフォルトが使用されます。

構成の<bindings>セクションで定義したのは、バインディング構成-の代わりに使用される選択したバインディングのパラメーターのセットです。システムのデフォルト

したがって、binding=bindingConfiguration=が一致する必要があります-1つのバインディング(例:basicHttpBinding)を定義することはできませんが、別のバインディングのバインディング構成。

しかし、それでもhttpsが機能しない理由は説明されていません。これは他の問題であるに違いありません。もう少し詳しく教えていただけますか?どのように機能しません?応答がない、またはエラーが発生しますか(その場合:そのエラーは何ですか ??)

23
marc_s

から MSDNドキュメント

bindingConfiguration:エンドポイントがインスタンス化されるときに使用するバインディングのバインディング名を指定する文字列。バインディング名は、エンドポイントが定義された時点でスコープ内にある必要があります。デフォルトは空の文字列です。この属性は、構成ファイル内の特定のバインディング構成を参照するために、バインディングと組み合わせて使用​​されます。カスタムバインディングを使用する場合は、この属性を設定します。そうしないと、例外がスローされる可能性があります。

bindingName:WSDLを介した定義エクスポートのバインディングの一意の修飾名を指定する文字列。デフォルトは空の文字列です。

bindingNameを使用したことはありませんが、エンドポイント用に生成されたWSDLにのみ影響するようです。 bindingConfiguration="basicHttps"を使用したときに何かが機能しない場合は、構成が間違っているために正しく機能していないようです(bindingConfigurationが指定されていない場合は、デフォルトが適用されます。これは、bindingConfigurationを変更したときに発生することです。 bindingNameへ)。 <transport clientCredentialType="None"/>は有効ではないと思います。可能な値は、Basic、Certificate、Digest、Windows、またはNTLMです。 トランスポートセキュリティの概要 を参照してください

8
Joel C

サービス構成のバインディングが正しくありません。したがって、bindingConfiguration属性を使用してバインディング構成を正しく参照すると、サービスは機能しません。使用されている無効な属性であるbindingName属性を使用すると、サービスはカスタム構成を確認せずにbasicHttpBindingを開始するだけで、正しく機能しているようです。

2つの要素の違いについては、 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 を参照してください。

7
kroonwijk

bindingConfigurationエンドポイントがインスタンス化されるときに使用するバインディングのバインディング名を指定する文字列。バインディング名は、エンドポイントが定義された時点でスコープ内にある必要があります。デフォルトは空の文字列です。

この属性は、構成ファイル内の特定のバインディング構成を参照するために、バインディングと組み合わせて使用​​されます。カスタムバインディングを使用する場合は、この属性を設定します。そうしないと、例外がスローされる可能性があります。

bindingName WSDLを介した定義エクスポートのバインディングの一意の修飾名を指定する文字列。デフォルトは空の文字列です。

0
Sonu Rajpoot