1

自己ホスト型の WCF サービスがたくさんあります。すべてが正常に機能していますが、結果の構成を正規化/簡素化する方法を探しています。できるだけ単純化しましたが、それでも満足できません。現在、私の設定は次のようになっています。

<system.serviceModel>
    <bindings>
        <netTcpBinding>
            <binding name="BindingConfiguration" ...>
                ...
            </binding>
        </netTcpBinding>
    </bindings>

    <behaviors>
        <serviceBehaviors>
            <behavior name="ServiceBehavior">
                 ...
            </behavior>
        </serviceBehaviors>
    </behaviors>

    <services>
        <service behaviorConfiguration="ServiceBehavior" name="Name1">
            <endpoint address="net.tcp://localhost:8080/name1" binding="netTcpBinding" bindingConfiguration="BindingConfiguration" contract="Contract1">
                <identity>
                    <dns value="localhost" />
                </identity>
            </endpoint>
        </service>
        <service behaviorConfiguration="ServiceBehavior" name="Name2">
            <endpoint address="net.tcp://localhost:8080/name2" binding="netTcpBinding" bindingConfiguration="BindingConfiguration" contract="Contract2">
                <identity>
                    <dns value="localhost" />
                </identity>
            </endpoint>
        </service>
        ...
    </services>
</system.serviceModel>

全部で 6 つのサービスがあるため、繰り返しになります。理想的には、私はしたいです:

  • 「localhost:8080」を1回だけ指定して全サービスで共有し、差分(「name1」または「name2」)のみを指定する場合
  • ID 情報を 1 回だけ指定し、すべてのサービス定義間で共有する

最初のポイントとして、ベース アドレスについては認識していますが、それはサービス レベルでのみ機能し、個別のサービス間では機能しません。2 つ目のポイントとして、ID 情報をエンドポイントの動作に移動しようとしましたが、サポートされていないようです。

この構成を簡素化するためにできることはありますか? または、コードベースの構成アプローチに切り替える唯一のオプションですか?

4

1 に答える 1

1

残念ながら、お気付きのように、ベース アドレスの概念はサービスごとのレベルにすぎないため、特定のサービスに多数のエンドポイントがある場合は、それを使用できます。

実際に使用できる唯一のオプションは、ベース アドレスを構成する他の手段を使用し、それを使用してコードでサービス エンドポイントを作成することです。サービスを自己ホストする場合は、呼び出す前にホスト コードでこれを行うことができます。IISServiceHost.Open()でホストする場合は、このすべてのセットアップを行う独自のカスタムを作成し、ServiceHostFactoryそのカスタム サービス ホスト ファクトリを使用してIIS でサービス ホストを作成します。

どちらも管理可能な労力で実行可能です - 問題は、それがあなたにとって手間をかける価値があるかどうかですが、私たちはあなたの代わりにそれを決定することはできません...

于 2010-04-09T12:53:26.367 に答える