【问题标题】:Supply a different endpoint address in the WSDL of a WCF web service在 WCF Web 服务的 WSDL 中提供不同的端点地址
【发布时间】:2011-07-01 17:31:21
【问题描述】:

我有一个相当标准的 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>

(无聊的部分省略)

我正在寻求一种快速且肮脏的方法来将生成的 WSDL 中给出的地址更改为完全不同的地址,例如:

https://othermachine/other_dir/other_service.svc

最简单的方法是什么?

【问题讨论】:

  • 反思可能是最简单的方法。实现一个自定义行为,该行为使用反射来迭代生成的 WSDL,并将地址节点的位置属性设置为您想要的任何值。

标签: wcf web-services iis-7 wsdl


【解决方案1】:

您可以查看几种方法:

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

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

您可以使用&lt;serviceMetadata&gt; 行为配置选项#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?
  • @Jeremy:WSDL 将按原样反映服务地址 - 如果这不是您想要的,您必须以某种方式修改 WSDL;要么使用自定义 WSDL 生成代码,生成正确的“修改过的”WSDL,要么准备好一个静态的、修改过的 WSDL 以供下载
猜你喜欢
  • 1970-01-01
  • 2011-09-03
  • 2013-02-11
  • 2013-09-14
  • 1970-01-01
  • 1970-01-01
  • 2020-03-20
  • 2012-11-02
  • 1970-01-01
相关资源
最近更新 更多