Подтвердить что ты не робот

Зачем мне нужна конечная точка mex и httpGetEnable?

Мне было интересно, почему мне нужно объявить это:

 <serviceMetadata httpGetEnabled="true" />

а также этот

<endpoint contract="IMetadataExchange" binding="mexHttpBinding" address="mex" />

Если я использую только первый - , он работает через браузер. , так зачем мне нужен второй?

Можете ли вы привести пример, пожалуйста, для ситуации, в которой я буду использовать последний?

4b9b3361

Ответ 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, связанных с ним.