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

Jus*_*tin 5 wcf iis-7 wsdl web-services

我有一个相当标准的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>
Run Code Online (Sandbox Code Playgroud)

(省略无聊的位)

我正在以一种快速的方式将生成的WSDL中给出的地址更改为完全不同的地址,例如:

https://othermachine/other_dir/other_service.svc
Run Code Online (Sandbox Code Playgroud)

这样做最简单的方法是什么?

mar*_*c_s 10

您可以看到几种方法:

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

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

您可以使用以下<serviceMetadata>行为配置选项#2 :

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

如果执行此操作,并且您的服务使用此服务行为,则对WSDL或MEX数据的任何请求都将路由到您提供的静态WSDL,而不是使用WCF通常提供的自动生成的WSDL.