2009-09-12 43 views
5

既定では、IIS 7 Webサイトには、バインド情報文字列「808:」を持つnet.tcpバインディングがあります。 "xxx:"という別のnet.tcpバインディングを追加すると、例外が発生します。2つのTCPポートでnet.tcpバインディングを使用するIIS 7(WAS)でWCFサービスをホストする

このコレクションには、すでにnet.tcpスキームのアドレスが含まれています。このコレクションには、スキームごとに最大1つのアドレスが存在します。 パラメータ名:item

この問題を解決して2つのポートでサービスを受信するにはどうすればよいですか?

答えて

8

基本的に、サービスでは、任意の数のポートに任意の数のサービスエンドポイントを定義できる必要があります。

これを行うには、2つの方法があります:

  • がいる場合、各エンドポイントに

完全なアドレスを定義

  • あなたのサービスのエンドポイントにベースアドレスと相対アドレスを定義しますオプション1を実行すると、次のようになります。

    <service name="YourService"> 
        <host> 
        <baseAddresses> 
         <add baseAddress="net.tcp://YourServer:5151/Services" /> 
        </baseAddresses> 
        </host> 
        <endpoint name="endpoint1" 
          address="Service1" 
          binding="netTcpBinding" 
          contract="IYourService" /> 
        <endpoint name="endpoint2" 
          address="Service2" 
          binding="netTcpBinding" 
          contract="IYourService" /> 
    </service> 
    

    だからこのケースでは、同じ契約の2つのサービスのエンドポイントを持っている、と彼らは、URL

    net.tcp://YourServer:5151/Services/Service1 
    

    net.tcp://YourServer:5151/Services/Service2 
    

    でリッスンすることがありますあなたはmulitpleサービスエンドポイントを持つことができますが、ベースアドレスは1つだけです。

    他のオプションは何のベースアドレスを指定していないし、直接エンドポイントであなたのフルサービスのアドレスを指定することです:あなたはエンドポイントで全体のアドレスを定義していることから、この場合、

    <service name="YourService"> 
        <endpoint name="endpoint1" 
          address="net.tcp://YourServer:5151/Services/Service1" 
          binding="netTcpBinding" 
          contract="IYourService" /> 
        <endpoint name="endpoint2" 
          address="net.tcp://YourServer:6868/Services/Service2" 
          binding="netTcpBinding" 
          contract="IYourService" /> 
    </service> 
    

    、あなたが選ぶことができます2つの異なるTCPポート(各エンドポイント用に1つ)。これは全く問題なく動作します。 2つの別々のポートに2つの別個のエンドポイントがあり、両方ともリスンされ、同じサービスクラスによってバックグラウンドでサービスされます。

    マーク

  • +1

    私はどこかで、iis enivornmentでbaseAddressesが無視されると読んでいます。 – Konstantin

    +0

    私はあなたのコメントに同意し、そのようなリンクを提供します。基本的には基本アドレスは無視されますが、上記の例はエンドポイントアドレスが提供されているために保持されます。これらは、IISのサイトバインディング情報とともに暗黙的に使用されます。 http://msdn.microsoft.com/en-us/magazine/cc163412.aspx – dyslexicanaboko

    0

    私はもう一度です。

    これは自己ホストと

    <baseAddresses> 
          <add baseAddress="net.tcp://localhost" /> 
          <add baseAddress="net.tcp://localhost:12345" /> 
    </baseAddresses> 
    

    動作しますが、IIS7 +と原因例外

    はnet.tcpに接続できませんでしたWAS:// localhostを:12345/game2.svcを。接続の試行は、00:00:02.0936160の時間間隔で続きました。 TCPエラーコード10061:ターゲットマシンが積極的に127.0.0.1:12345を拒否したため、接続できませんでした。

    質問は、私は私のウェブサーバ先日のいずれかにWCFサービスをdeplyしようとしていた

    2

    IISホスティング環境についてだったと問題に遭遇しました。次のエラーメッセージが表示されました。p>

    このコレクションには、スキームhttpのアドレスが含まれています。このコレクションには、スキームごとに1つのアドレスしか指定できません。パラメータ名:item

    問題はローカルマシンでは発生しませんでしたが、ウェブサーバ上で発生していたため、何が原因か分かりませんでした。 Webサーバーが共有ホスティング環境にあるため、WCFサービスもホストヘッダーを認識する必要があるため、サーバー上で発生しました。これを行うには、web.configに移動して次の行を追加してください:

    <serviceHostingEnvironment> 
    <baseAddressPrefixFilters>  
        <add prefix=http://MyHostHeader /> 
    </baseAddressPrefixFilters> 
    </serviceHostingEnvironment> 
    
    +1

    .NET 4.0では、これはによって修正されています。 –

    関連する問題