Зачем мне нужна и mex конечная точка, и httpGetEnable?
Мне было интересно, почему я должен объявить это:
<serviceMetadata httpGetEnabled="true" />
а также это
<endpoint contract="IMetadataExchange" binding="mexHttpBinding" address="mex" />
Если я использую только первый - он работает через браузер.так зачем мне второй?
Можете ли вы дать мне пример, пожалуйста, для ситуации, в которой я буду использовать последний?
3 ответа
Вам нужно
разрешить службе публиковать метаданные вообще (это
serviceMetadata
поведение) - но вам не нужноhttpGetEnabled
- это необязательноиметь место (конечную точку), где запрашивающий клиент может получить метаданные службы - это конечная точка MEX. Это для машиночитаемого формата метаданных, который Visual Studio или svcutil могут использовать для создания клиента. Он не предназначен для потребления человеком
Это кажется полезным в следующей ситуации...
<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, ни то, ни другое не будет работать.
Вы удивляетесь, почему метаданные все еще можно увидеть в браузере как
а) у меня нет конечной точки HTTP и б) я специально установил...
<serviceMetadata httpGetEnabled="false" />
Это связано с тем, что в расширенных настройках веб-сайта для расширенных протоколов в разделе "Дополнительные настройки" было определено следующее...
http,net.tcp
Если вы удалите http
тогда метаданные не будут видны в браузере. Казалось бы, именно в этом сценарии вам нужен только сайт с поддержкой net.tcp, и вам нужна конечная точка mex.
Конечные точки MEX - это специальные конечные точки, которые позволяют клиентам получать метаданные службы, используя сообщения SOAP вместо запросов http get. Вы можете создать конечную точку MEX, к которой можно получить доступ через http, https, tcp и даже по именованным каналам.
Ответ, который вы получите при вызове операции GetMetadata конечной точки MEX, будет включать содержимое WSDL и все файлы XSD, связанные с ним.