3

在我的 ASP.NET WebForms 项目中,我引用了 WCF 服务库项目,其中包含每个业务对象的不同 WCF 服务。这些服务托管在 IIS 中,并且可以通过我在 Global.asax 中定义的路由获取 WSDL:每个服务通过一个路由一个 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>

你们都完成了。您可以单独通过以下 URLS 直接访问服务的 WSDL 文件:

http://localhost/WcfRoutingService/RoutingService.svc/StandardService
http://localhost/WcfRoutingService/RoutingService.svc/PremiumService
于 2013-11-10T14:35:58.983 回答
0

the problem in your solution is : you give to your clients a WSDL with the address of your web service PremiumWCFService and StandardService , and the clients (WCF) can use that directly without check and can call your web sevices without call routing service.

于 2017-07-24T14:48:58.157 回答