在WCF web服务的WSDL中提供不同的端点地址

在WCF web服务的WSDL中提供不同的端点地址,wcf,web-services,iis-7,wsdl,Wcf,Web Services,Iis 7,Wsdl,我有一个相当标准的WCF服务(托管在IIS7上),当使用?WSDL查询时,它会生成相当标准的WSDL: <wsdl:definitions> <!-- ... --> <wsdl:service> <wsdl:port> <soap:address location="https://machine/virtual_dir/servicename.svc"/> </wsdl:port>

我有一个相当标准的WCF服务(托管在IIS7上),当使用
?WSDL
查询时,它会生成相当标准的WSDL:

<wsdl:definitions>
  <!-- ... -->
  <wsdl:service>
    <wsdl:port>
      <soap:address location="https://machine/virtual_dir/servicename.svc"/>
    </wsdl:port>
  </wsdl:service>
</wsdl:definitions>

最简单的方法是什么?

有几种方法可供您参考:

  • WCF支持许多扩展点,WSDL的生成就是其中之一。您可以编写自己的自定义WSDL生成器并将其插入WCF

  • 可能更简单的方法是生成您拥有的WSDL,然后手动调整它,并将该WSDL文件放在某个位置,并将其配置为提供服务(而不是WCF在运行时根据请求生成WSDL)

您可以使用
行为配置选项2:

<behaviors>
   <serviceBehaviors>
       <behavior name="StaticMetadata">
           <serviceMetadata httpGetEnabled="true"
                externalMetadataLocation="(url path to your static WSDL file)" />
       </behavior>
   </serviceBehaviors>
</behaviors>


如果您这样做,并且您的服务使用此服务行为,那么对WSDL或MEX数据的任何请求都将路由到您提供的静态WSDL,而不是使用WCF通常提供的自动生成的WSDL。

反射可能是最简单的方法。实现一种自定义行为,该行为使用反射在生成的WSDL上迭代,并将地址节点的位置属性设置为您想要的任何值。在不修改WSDL的情况下,是否无法通过配置指定地址?@Jeremy:WSDL将按原样反映服务地址-如果这不是您想要的,您必须以某种方式修改WSDL;通过使用定制的WSDL生成代码来生成正确的“修改的”WSDL,或者通过让一个静态的、修改的WSDL随时可以下载
<behaviors>
   <serviceBehaviors>
       <behavior name="StaticMetadata">
           <serviceMetadata httpGetEnabled="true"
                externalMetadataLocation="(url path to your static WSDL file)" />
       </behavior>
   </serviceBehaviors>
</behaviors>