Скройте конечную точку REST от MEX/WSDL в WCF

У меня есть сервис WCF, который имеет REST и конечные точки SOAP для каждого сервиса. Это было реализовано так же к этому сообщению: REST / конечные точки SOAP для сервиса WCF с конфигурацией, подобной следующему:


  
    
    
    
  

Проблема состоит в том, что остальное конечная точка обнаруживается в получающемся WSDL как дополнительный порт и привязка.

Там какой-либо путь состоит в том, чтобы предотвратить остальных конечная точка от того, чтобы быть включенным в WSDL?

6
задан Community 23 May 2017 в 12:01
поделиться

1 ответ

Вы можете получить копию WSDL, вручную отредактировать ее для удаления нежелательных артефактов и сохранить в известном месте. Если у вас есть версия WSDL, которая удаляет нежелательные артефакты, вы можете перенаправить запрос? Wsdl в это место:

<behaviors>
 <serviceBehaviors>
    <behavior name="TestServiceBehavior">
     <serviceMetadata httpGetEnabled="True" externalMetadataLocation="http://localhost/TestService.wsdl"/>
    </behavior>
 </serviceBehaviors>
</behaviors>

Несколько предостережений по поводу этого решения. Вы должны быть осторожны с тем, что редактируете. Если вы измените критические аспекты контракта, WCF может оказаться не в состоянии обрабатывать сообщения от клиентов, сгенерированных из него. Удаление конечной точки, как правило, не представляет большого труда, однако изменение имен привязок, операций, типов сообщений и т. Д. Может вызвать проблемы.

Вы также должны знать об импорте. WSDL, созданный WCF, обычно определяет конечные точки, а затем импортирует другой .wsdl, который определяет фактический контракт службы. Сервисный контракт wsdl обычно импортирует несколько файлов .xsd, которые определяют ваше сообщение и типы данных. Вам нужно будет убедиться, что у вас есть их копии, загруженные относительно корневого .wsdl, и что вы обновляете элементы импорта, чтобы ссылаться на них соответствующим образом.

Другая проблема заключается в том, что вы теперь вручную управляете своим контрактом ... что означает, что если вы измените его, вам придется отредактировать его снова и заменить на любом сайте, на котором размещен файл .wsdl. Правильно составленный контракт НИКОГДА не должен изменяться, поскольку это нарушает одно из фундаментальных правил SOA в отношении веб-сервисов. Однако похоже, что вы занимаетесь разработкой, ориентированной на код, так что об этом нужно знать.

1
ответ дан 17 December 2019 в 18:14
поделиться
Другие вопросы по тегам:

Похожие вопросы: