7

次の 2 つのケースの違いは何ですか。

構成 1:

<service name="WcfService1.Service1" behaviorConfiguration="MyServiceTypeBehaviors">
    <host>
        <baseAddresses>
            <add baseAddress="net.tcp://127.0.0.1:808/" />
        </baseAddresses>
    </host>
    <endpoint address="service"
              binding="netTcpBinding" 
              bindingConfiguration="MainBinding" 
              bindingName="MainBinding" 
              name="DefaultEndpoint" 
              contract="WcfService1.IService1" />
    <endpoint address="mex" 
              binding="mexTcpBinding" 
              contract="IMetadataExchange" />
</service>

構成 2:

<service name="WcfService1.Service1" behaviorConfiguration="MyServiceTypeBehaviors">
    <host>
        <baseAddresses>
            <add baseAddress="net.tcp://127.0.0.1:808/service" />
        </baseAddresses>
    </host>
    <endpoint address="net.tcp://127.0.0.1:808/service" 
              binding="netTcpBinding" 
              bindingConfiguration="MainBinding" 
              bindingName="MainBinding" 
              name="DefaultEndpoint" 
              contract="WcfService1.IService1" />
    <endpoint address="mex" 
              binding="mexTcpBinding" 
              contract="IMetadataExchange" />
  </service>

私が理解しているのは、どちらの場合もベースアドレス + エンドポイントアドレスが同じ絶対アドレスに解決されることです

しかし、構成 2エラー が発生するのはなぜですか

編集1:

作業構成:

<host>
    <baseAddresses>
        <add baseAddress="net.tcp://127.0.0.1:808/" />
    </baseAddresses>
</host>
<endpoint address="service"
          binding="netTcpBinding" 
          bindingConfiguration="MainBinding" 
          bindingName="MainBinding" 
          name="DefaultEndpoint" 
          contract="WcfService1.IService1" />

機能していない構成:

<host>
    <!--
    <baseAddresses>
        <add baseAddress="" />
    </baseAddresses>
    -->
 </host>
 <endpoint address="net.tcp://127.0.0.1:808/service"
           binding="netTcpBinding" 
           bindingConfiguration="MainBinding" 
           bindingName="MainBinding" 
           name="DefaultEndpoint" 
           contract="WcfService1.IService1" />
 <endpoint address="mex" 
           binding="mexTcpBinding" 
           contract="IMetadataExchange" />

この場合、ベース アドレスを削除し、完全なサービス アドレス (.svc パスなし) を提供しましたが、ソケット タイムアウト エラーが発生します。この場合、何が問題なのですか? ベースアドレスが定義されていない場合、エンドポイントアドレスには常に .svc を含む完全なアドレスが必要ですか? もしそうなら、背後にある理由は何ですか?

4

1 に答える 1

20

baseAddressエンドポイントのベースアドレスです (明示的に指定されていない限り)。したがって、すべて<endpoint>がから継承されます<baseAddress>(これが、通常""およびである理由"mex"です)。例えば

<host>
   <baseAddresses>
     <add baseAddress="http://127.0.0.1:1337/" />
   </baseAddresses>
</host>
...
<endpoint address="" contract="MyService.IMyContract" ... />
<endpoint address="mex" contract="IMetadataExchange" ... />

これで、次の 2 つのエンドポイントができました。

  • http://127.0.0.1:1337/- サービス エンドポイント
  • http://127.0.0.1:1337/mex- メタデータ エンドポイント

を免除する<baseAddress>ことにより、両方が完全に修飾されている必要があります<endpoints>(mex (そうでない) を含む)。例えば

<host>
   <baseAddresses/>
</host>
...
<endpoint address="net.tcp://127.0.0.1:1337/" contract="MyService.IMyContract" ... />
<endpoint address="http://127.0.0.1:1337/mex" contract="IMetadataExchange" ... />

これで、2 つの異なるエンドポイントができました。

  • net.tcp://127.0.0.1:1337/- サービス エンドポイント
  • http://127.0.0.1:1337/mex- メタデータ エンドポイント
于 2013-09-10T13:55:07.037 に答える