Зачем мне нужна конечная точка mex и httpGetEnable?
Мне было интересно, почему мне нужно объявить это:
<serviceMetadata httpGetEnabled="true" />
а также этот
<endpoint contract="IMetadataExchange" binding="mexHttpBinding" address="mex" />
Если я использую только первый - , он работает через браузер.
, так зачем мне нужен второй?
Можете ли вы привести пример, пожалуйста, для ситуации, в которой я буду использовать последний?
Ответы
Ответ 1
Вам нужно
-
разрешить службе публиковать метаданные вообще (поведение serviceMetadata
), но вам не нужно httpGetEnabled
- это необязательный
-
имеют место (конечная точка), где запрашивающий клиент может захватить эти метаданные службы - это конечная точка MEX. Это для машиночитаемого формата метаданных - тот, который Visual Studio или svcutil может использовать для создания клиента. Он не предназначен для потребления человеком
Ответ 2
Это кажется полезным в следующей ситуации...
<system.serviceModel>
<services>
<service name="WCFService.Service" behaviorConfiguration="ServiceBehavior">
<host>
<baseAddresses>
<add baseAddress="net.tcp://localhost:8080/WCFService"/>
</baseAddresses>
</host>
<!-- Net.Tcp EndPoints-->
<endpoint address=""
binding="netTcpBinding"
contract="WCFService.IService" />
<endpoint address="mex"
binding="mexTcpBinding"
contract="IMetadataExchange" />
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="ServiceBehavior">
<serviceMetadata httpGetEnabled="false" />
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
Конкретных конечных точек HTTP нет, и вы можете обратиться к своей службе следующими способами:
- Browser: http://localhost/WCFService/Service.svc
- svcutil.exe net.tcp://localhost:8080/WCFService/Service.svc/mex
Если вы закомментируете конечную точку MEX, то ни одна из них не будет работать.
Вам интересно, почему мета-данные все еще можно увидеть в браузере как
a) У меня нет конечной точки HTTP и
б) Я специально установил...
<serviceMetadata httpGetEnabled="false" />
Причиной этого является то, что в расширенных настройках для веб-сайта у меня было определено следующее для Enabled Protocols в разделе "Дополнительные настройки"...
http,net.tcp
Если вы удалите http
, метаданные не будут видны в браузере. Казалось бы, именно в этом сценарии net.tcp разрешил только веб-сайт, что вам нужна конечная точка mex.
Ответ 3
Конечные точки MEX - это специальные конечные точки, которые позволяют клиентам получать метаданные служб, используя SOAP-сообщения вместо HTTP-запросов. Вы можете создать конечную точку MEX, к которой можно получить доступ через http, https, tcp и даже именованные каналы.
Ответ, который вы получите при вызове операции GetMetadata конечных точек MEX, будет содержать содержимое WSDL и всех файлов XSD, связанных с ним.