3

私の ASP.NET WebForms プロジェクトには、ビジネス オブジェクトごとに異なる WCF サービスを含む WCF サービス ライブラリ プロジェクトへの参照があります。サービスは IIS でホストされており、Global.asax で定義したルートを介して WSDL を取得できます。サービスごとに 1 つのルートを介して 1 つの WSDL を取得できます。

私が本当に必要としているのは、さまざまな顧客に提供したいサービスを選択し、選択したサービス セットに対して単一の WSDL を生成する機能です。

4

2 に答える 2

7

はい、WCF ルーティング サービスを構成し、その背後にある個々のサービスから WSDL ファイルを取得することができます。

手順 1 -HttpGetEnabled set to trueルーター サービスの背後にあるすべての WCF サービスで MEX エンドポイントを設定および構成する

 <service behaviorConfiguration="routingBehv" name="System.ServiceModel.Routing.RoutingService">
    <host>
      <baseAddresses>
        <add baseAddress="http://localhost/WcfRoutingService/RoutingService.svc"/>
      </baseAddresses>
    </host>       
    <endpoint address="http://localhost/WcfRoutingService/RoutingService.svc" binding="mexHttpBinding" name="mexEndpoint" contract="System.ServiceModel.Routing.IRequestReplyRouter"/>
  </service>

ステップ 2 -ルーティング サービスの構成

エンドポイントを追加

<endpoint address="" binding="mexHttpBinding" name="mexEndpoint" contract="System.ServiceModel.Routing.IRequestReplyRouter"/>

サービス動作を追加

 <behaviors>
      <serviceBehaviors>
        <behavior>
          <routing routeOnHeadersOnly="false" filterTableName="routingTable" />
          <serviceDebug includeExceptionDetailInFaults="true" />
          <serviceMetadata httpGetEnabled="false" />
        </behavior>

      </serviceBehaviors>
    </behaviors>

クライアント エンドポイント アドレスは、「MEX」エンドポイント アドレスを指定する必要があります

 <client>
  <endpoint address="http://localhost/PremiumWcfService/PremiumWCFService.svc/mex" binding="mexHttpBinding" contract="*" name="PremiumServiceMex"/>
  <endpoint address="http://localhost/StandardWCFService/StandardWCFService.svc/mex" binding="mexHttpBinding" contract="*" name="StandardServiceMex"/>  
</client>

ルーティング テーブルを指定する

<routing>
  <filters>
    <filter name="StandardServiceMexFilter" filterType="EndpointAddress" filterData="http://tempuri.org/WcfRoutingService/RoutingService.svc/StandardService" />
    <filter name="PremiumServiceMexFilter" filterType="EndpointAddress" filterData="http://tempuri.org/WcfRoutingService/RoutingService.svc/sPreminuService" />
  </filters>
  <filterTables>
    <filterTable name="routingTable">
      <add filterName="StandardServiceMexFilter" endpointName="StandardServiceMex"/>
      <add filterName="PremiumServiceMexFilter" endpointName="PremiumServiceMex"/>       
    </filterTable>
  </filterTables>
</routing>

これで完了です。以下の URL を個別に使用して、サービスの WSDL ファイルに直接アクセスできます。

http://localhost/WcfRoutingService/RoutingService.svc/StandardService
http://localhost/WcfRoutingService/RoutingService.svc/PremiumService
于 2013-11-10T14:35:58.983 に答える