В WCF как убрать привязки из метаданных? - PullRequest
0 голосов
/ 31 марта 2010

WSDL, сгенерированный WCF, описывает все мои привязки, и я хочу, чтобы он описывал только wsHttpBinding.

Я хочу, потому что PHP-клиент не может проанализировать WSDL, если он содержит неизвестные привязки.

Есть способ сделать это?

1 Ответ

3 голосов
/ 31 марта 2010

Иметь службу и конечную точку, которая предоставляет только ничего, кроме wsHttpBinding, и подключаться к этой конечной точке с помощью вашего PHP-клиента - это должно работать. Думаю, что на самом деле больше ничего нельзя сделать - если служба предоставляет более одной конечной точки с различными привязками, все эти привязки и конечные точки окажутся в WSDL.

Так что просто введите отдельную служебную запись:

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

и подключите здесь клиент PHP - поскольку существует только одна конечная точка wsHttpBinding, она должна работать.

Таким образом, вы не можете удалить привязки из метаданных, но можете запретить включение некоторых метаданных.

Другой вариант - иметь отдельный WSDL для вашего сервиса, который будет работать с PHP. Вы даже можете определить статические внешние метаданные WSDL, используя поведение serviceMetadata:

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