当前位置 : 主页 > 网络编程 > ASP >

asp.net – WCF:如何将多个服务组合到单个WSDL中

来源:互联网 收集:自由互联 发布时间:2021-06-24
在我的ASP.NET WebForms项目中,我引用了WCF服务库项目,该项目包含每个业务对象的不同WCF服务.这些服务托管在IIS中,可以通过我在Global.asax中定义的路由获取WSDL:一个WSDL通过一条路由为每个
在我的ASP.NET WebForms项目中,我引用了WCF服务库项目,该项目包含每个业务对象的不同WCF服务.这些服务托管在IIS中,可以通过我在Global.asax中定义的路由获取WSDL:一个WSDL通过一条路由为每个服务.

我真正需要的是 – 一些选择服务的能力,我想为不同的客户提供服务,并为所选服务集生成一个单一的WSDL.

是的,可以配置WCF路由服务并获取WSDL文件,从而形成单独的服务.

步骤1 – 将HttpGetEnabled设置为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
网友评论