Re: Как закешировать WSDL?
От: Михаил Романов Удмуртия https://mihailromanov.wordpress.com/
Дата: 28.12.17 11:59
Оценка:
Здравствуйте, mDmitriy, Вы писали:

Для начала стоит уточнить, как именно вы экспортируете WSDL.

D>Есть мнение, что запрос WSDL каждый раз ее генерит, чем нагружает сервисы

Откуда взялось это мнение?
Вы можете сами посмотреть на реализацию
ServiceMetadataBehavior
ServiceMetadataExtension

Последний вообще реализован как IExtension<ServiceHostBase>, т.е. предполагается, что он будет иметь 1 экземпляр на каждый запущенный хост.
Ну а там в коде можно посмотреть на методы EnsureInitialized() или EnsureSingleWsdlInitialized() — там явно стоит защита от повторной генерации метаданных.

Ну а MetadataSet да, требует некоторое время на сериализацию, но на сколько оно критично — вопрос (ну и янигде по коду не смотрел — может и результат сериализации кэшируется)

D>Вопрос — можно ли однократно полученную WSDL как-то положить в кеш и при ее запросе отправлять содержимое кеша?

Можно, вопрос нужно ли...
Но прежде чем что-то вам советовать, я бы уточнил какие данные из метаданных вы хотите использовать.
Там помимо описания контрактов, которые можно получить в любой момент, вплоть до compile time, есть еще описание endpoints, а вот эти данные уже вытащить можно, имхо, только у запущенного иполностью сконфигурированного хоста.

D>PS. WSDL запрашивается по другому порту и биндингу, нежели все остальное

D>Какой лучше тип биндинга (с точки зрения минимализации ресурсоемкости) для такого запроса использовать?
Я всё же не понял, вы используете какую-то свою реализацию, или работаете через стандартный mex-endpoint (или вообще отдаете через get-запрос)
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.