28

そのため、サービス エンドポイントとホスト ベース アドレスの目的について少し混乱しています。これまでに説明したすべての例では、必要なバインディングを使用してエンドポイントをセットアップする方法について説明しており、通常はそれらのエンドポイントに移動できます。

ただし、次の構成を使用してサービスをセットアップおよびホストすると、ホストのベースアドレスのみが公開されるようです。

    <configuration>
      <system.web>
        <compilation debug="true" />
      </system.web>
      <!-- When deploying the service library project, the content of the config file must be added to the host's
      app.config file. System.Configuration does not support config files for libraries. -->
      <system.serviceModel>
        <services>
          <service name="HostService.EvalService">
            <endpoint address="http://localhost:8080/basic"
              binding="basicHttpBinding" contract="HostService.IEvalService" />
            <endpoint address="http://localhost:8080/ws"
              binding="wsHttpBinding" contract="HostService.IEvalService" />
            <endpoint address="mex" binding="mexHttpBinding"
              name="mex" contract="IMetadataExchange" />
            <host>
              <baseAddresses>
                <add baseAddress="http://localhost:8080/EvalsService" />
              </baseAddresses>
            </host>
          </service>
        </services>
        <behaviors>
          <serviceBehaviors>
            <behavior name="">
              <serviceMetadata httpGetEnabled="true" />
              <serviceDebug includeExceptionDetailInFaults="false" />
            </behavior>
          </serviceBehaviors>
        </behaviors>
      </system.serviceModel>
    </configuration>

誰かが私にこれを説明できますか?

4

3 に答える 3

37

IIS で WCF サービスをホストする場合、ベース アドレスは .svc ファイルへの URL のみにすることができます。他のベース アドレスを指定すると、無視されます。address="basic"またはなど、エンドポイントの相対 URI を引き続き指定できますaddress = "ws"。この場合、エンドポイントのアドレスは<URL to the .svc file>/basicandになります。<URL to the .svc file>/ws

于 2011-08-04T11:43:48.043 に答える
22

エンドポイント アドレスを空のままにすると、エンドポイントは対応するベース アドレスをエンドポイント アドレスに使用するだけになります。または、ベース アドレスをサービスの絶対パスとして構成するか、より適切な方法として、エンドポイントの相対アドレスを書き込むことができます。

IIS でサービスをホストする場合、サービス ベース アドレスは IIS 仮想ディレクトリと .svc ファイルによって決定されます。

calc.svc という名前のファイルがあり、それを「http://localhost:8080/calcservice」に対応する仮想ディレクトリに配置するとします。このサービスのベース アドレスは「http://localhost:8080/calcservice/calc.svc」になります。

IIS は、サービス展開パスに従って決定されたこのベース アドレスを使用するようエンドポイントに強制します。対応する仮想ディレクトリとは異なるベース アドレスを指定すると、例外が発生します。

以下の構成を検討してください。

<configuration>
    <system.serviceModel>
        <services>
            <service name="CalculatorService">
              <!-- base address determined by IIS virtual directory -->
              <endpoint binding="basicHttpBinding" contract="ISimpleMath"/>
              <endpoint address="secure" binding="wsHttpBinding" contract="ISimpleMath"/>
              <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
            </service>
        ...

... エンドポイント アドレスを空のままにしたため、最初のエンドポイントのアドレスはベース アドレス ('http://localhost:8080/calcservice/calc.svc') と同じになります。2 番目のエンドポイントのアドレスは、「http://localhost:8080/calcservice/calc.svc/secure」のように、ベース アドレスに「secure」を追加したものになります。また、「mex」エンドポイントのアドレスは「http://localhost:8080/calcservice/calc.svc/mex」です。アドレスの相対部分がファイル名の右側に追加されるため、一部の人にとっては少し奇妙に思えるかもしれませんが、calc.svc はベース アドレスの一部であるため、このように動作する必要があることを覚えておく必要があります。

ブラウザから「../mex」または「../secure」URL に移動することはできませんが、それらは実際にはアクティブであり、クライアントはこれらのアドレスを使用できます。

クライアントの動作

クライアントはサービスのベース アドレスを認識せず、ネットワーク側で同様のものをサポートする必要はありません。その結果、クライアント側オブジェクト モデルまたは構成セクションで、ベース アドレスに関連するものは何も見つかりません。クライアントは、常に絶対アドレスで構成された特定のエンドポイントを選択するだけで、その絶対アドレスによって、送信中に使用するアドレスが決まります。

上記の情報は、ほとんどが msdn に関する Aaron Skonnard の優れた記事から抽出されたものです。WCF アドレッシングの背後にある基礎を理解するために、これを読むことを強くお勧めします。

于 2013-01-09T12:21:50.243 に答える
6

ベース アドレスを使用する場合、エンドポイントに絶対 URI を指定する必要はありません。たとえば、address="basic"エンドポイント構成セクションで使用できます。これは、そのエンドポイントのアドレスが であることを意味しますhttp://localhost:8080/EvalsService/basic

于 2011-08-04T11:28:00.300 に答える