在WCF中如何从元数据中删除绑定?

时间:2010-03-31 18:31:38

标签: .net wcf wsdl metadata binding

WCF生成的WSDL描述了我的所有绑定,我希望它只描述wsHttpBinding

我想要它,因为如果一个PHP客户端包含未知的绑定,它就无法解析它。

有办法做到这一点吗?

1 个答案:

答案 0 :(得分:3)

拥有一个服务和一个端点,除了wsHttpBinding之外什么都不暴露,并使用你的PHP客户端连接到那个端点 - 应该可以工作。我认为,你真的没有别的办法可以做 - 如果一个服务公开了多个具有各种绑定的端点,那么所有这些绑定和端点都将以WSDL结束。

所以只需要一个单独的服务条目:

<services>    
    <service name="MyService">
        <endpoint name="WsHttpEndpoint"
            address="......."
            binding="wsHttpBinding"
            contract="IMyService" />
    </service>
</services>

并让PHP客户端在这里连接 - 因为只有一个wsHttpBinding端点,它应该可以工作。

因此,您无法真正从元数据中删除任何绑定 - 但您可以阻止包含某些元数据。

另一个选择是为您的服务提供单独的WSDL,它将与PHP一起使用。您甚至可以使用serviceMetadata行为定义静态外部元数据WSDL:

  <system.serviceModel>
    <behaviors>
      <serviceBehaviors>
        <behavior name="test">
          <serviceMetadata 
             externalMetadataLocation="http://YourServer/Service/WSDL/MyService.wsdl"/>
        </behavior>
      </serviceBehaviors>
    </behaviors>
  </system.serviceModel>