2011-08-04 8 views
23

だから私はサービスのエンドポイントとホストのベースアドレスが何であるか混乱している。すべての例で私はこれまで歩いてきましたが、必要なバインディングでエンドポイントを設定する方法について話していますが、通常はエンドポイントに移動できます。WCFサービスのエンドポイントとホストのベースアドレス

次の設定を使用して、ホストのベースアドレスを公開します。

<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> 

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

答えて

32

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

+0

まだエンドポイントにナビゲートできますか?現時点では私はできません –

+4

ブラウザのエンドポイントにナビゲートすることはできませんが、エンドポイントはまだアクティブであり、クライアントは正常に接続できるはずです。 –

+12

私は、MSがあなたの銃弾のいくつかを彼らの奇妙な文書に記載していない理由を知りません。 – PositiveGuy

6

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

+0

エンドポイントの相対アドレスをコードで設定することはできますか? – FrenkyB

15

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

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

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:8080/calcservice/calc.svc:// localhostの')。 2番目のエンドポイントのアドレスは、「http:// localhost:8080/calcservice/calc.svc/secure」のように、「secure」が付加されたベースアドレスの組み合わせになります。また、 "mex"エンドポイントのアドレスは "http:// localhost:8080/calcservice/calc.svc/mex"です。これは、アドレスの相対部分がファイル名の右側に追加されているため、一部の人にとってはちょっと変わって見えるかもしれませんが、calc.svcはベースアドレスの一部であるため、このように動作する必要があります。

あなたは、ブラウザを通じて「../mex」または「../secure」URLへをナビゲートすることはできませんが、彼らは実際にアクティブであり、クライアントがこれらのアドレスを消費することができます。

クライアントの動作

クライアントは、サービスのベースアドレスのない意識を持っていないし、電線の彼らの側に似た何かをサポートする必要がありません。その結果、クライアント側のオブジェクトモデルまたは構成セクションでは、ベースアドレスに関連するものは何も見つかりません。クライアントは特定のエンドポイントを選択するだけで、いつでも絶対アドレスが設定され、その絶対アドレスによって送信時に使用されるアドレスが決まります。

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

関連する問題