2011-10-31 21 views
8

私はちょうどwcfを学んでいて、とても基本的なことを理解できません。wcfエンドポイントの相対アドレス

IISでホストされたいWCFサービスを作成しています。ウェブアプリケーションのように、http://myhost/myapp/などの独自のパスがあります。

私はVSでのWCFサービスプロジェクトを作成していますが、私はそれを記述した*.svcファイルを持っている 、その後、私はそのように単純なエンドポイントを定義します。

<endpoint address="" 
      binding="basicHttpBinding" 
      contract="wcf_service_auth.IPshService" /> 

その後、私のようなこのサービスを公開しますIIS Webアプリケーションを仮想ディレクトリに移動するには、名前がpsh_pubであると仮定して、URL http://localhost/psh_pub/pshservice.svc/を使用してサービスにアクセスできます。それは私にWCFの挨拶のページを示し、私にWSDLへのリンクを与えてくれます。これは私に正しいwsdlの説明を与えます。

これは問題ありません。

次のステップ - MEXエンドポイントを追加します。私は設定に追加します。

あまりにも大丈夫です
<endpoint address="mex" 
      binding="mexHttpBinding" 
      contract="IMetadataExchange"/> 

、エンドポイントはアドレスhttp://localhost/psh_pub/pshservice.svc/mexでアクセス可能で、WcfTestClient.exeは私にそのURLから正しい設定を提供します。

ここで問題が発生します。

IISでWCFサービスが動作しており、もう1つのエンドポイントを追加したいとします。例えば、それをnet.tcpエンドポイントとします。 IISは、ポート808でnet.tcp接続を受け入れるようにデフォルトで設定されており、私は自分のWebアプリケーションのプロパティにnet.tcpプロトコルを追加している、と私はそのように私のサービスにエンドポイントを追加したい:

<endpoint address="" 
      binding="netTcpBinding" 
      contract="wcf_service_auth.IPshService" /> 

、今私のサービスは、URL net.tcp://localhost:808/psh_pub/pshservice.svcでアクセス可能でなければならないとします。しかし、そうではありません。そして、すべての「ハウツー」とWeb上のマニュアルでは、私はそのような設定ファイルに完全なアドレスを指定する必要があることを伝えます:

<endpoint address="net.tcp://localhost:808/psh_pub/pshservice.svc" 
      binding="netTcpBinding" 
      contract="wcf_service_auth.IPshService" /> 

そして、私はそうするならば、それは動作します。しかし、別の仮想ディレクトリにサービスをホストする場合、私は設定を変更する必要があります。他のサーバーでホストしている場合は、configを変更する必要があります。私が複数のサーバでホストしている場合、私は持っているサーバと同じくらい多くの設定を維持する必要があります。

だから主な質問は以下のとおりです。

それのために絶対URLを指定せずにIISがホストするWCFサービスのnet.tcp(またはhttps)エンドポイントを指定するWCFのいずれかの方法はありますか?

答えて

7

<system.serviceModel> 
    <serviceHostingEnvironment> 
    <serviceActivations> 
     <add relativeAddress="relative-virtual-path/yourservice.svc" 
      service="YourServiceImpl" /> 
    </serviceActivations> 
    </serviceHostingEnvironment> 
</system.serviceModel> 

相対このリンクそれについての協議を

Webアプリケーションのベースアドレスに

net.tcpサービスエンドポイントのベースアドレスを定義する必要があります。

その後
<service name="YourServiceName"> 
    <host> 
     <baseAddresses> 
      <add baseAddress="net.tcp://localhost:808/psh_pub/" /> 
     </baseAddresses> 
    </host> 

あなたは、実際のエンドポイントに相対アドレスを使用することができるはずです。

<endpoint name="Tcp01" 
      address="pshservice.svc" 
      binding="netTcpBinding" 
      contract="wcf_service_auth.IPshService" /> 
</service> 
+0

私はちょうど何をしたのか分かりませんが、空の "アドレス"パラメータを持つnet.tcpエンドポイントがあります。とにかく助けてくれてありがとう。 – pushist1y

4

WCFファイルレスアクティベーション(.Net 4。0)relativeAddress属性を使用して、相対仮想パスの下にあなたを登録できるようになる:http://msdn.microsoft.com/en-us/library/ee354381.aspx

+0

ファイルレス活性化が.SVCファイルを取り除くために私をすることができますが、私はそれがどのように役立つかを見ることができませんnet.tcpエンドポイントの絶対ホストアドレスを指定しないでください。何かお見逃しですか? – pushist1y

+0

@ pushist1yサービスアクティベーションの下にあるrelativeAddressという属性があり、サービスにアクセスするための相対的な仮想パスを指定できます。これはあなたのために働かないのですか? – Craig

関連する問題