2011-09-02 13 views
20

Me preguntaba ¿Por qué necesito para declarar esto:¿Por qué necesito ambos mex endpoint y httpGetEnable?

<serviceMetadata httpGetEnabled="true" /> 

y también esta

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

si uso sólo el primero - se está trabajando a través del navegador. Entonces, ¿por qué necesito el segundo?

¿Puede darme un ejemplo por favor para la situación que tendré que usar el último?

+2

Buena pregunta.+1 – Lijo

Respuesta

18

Necesitas

  • habilitar el servicio para publicar metadatos en absoluto (que es el serviceMetadata comportamiento) - pero no es necesario la httpGetEnabled - que es opcional

  • tienen un lugar (punto final) donde un cliente inquisitivo puede acceder a los metadatos del servicio: ese es el punto final MEX. Esto es para un formato legible por máquina de los metadatos, uno que Visual Studio o svcutil pueden usar para crear un cliente. No está destinado al consumo humano

+0

pero puede hacerlo también sin el punto final mex, es decir, por wsdl ... ¿y qué? –

+0

Si omito "mex endoint", ¿el "svcutil" no podrá tomarlo? –

+0

@ mid787: parece que tiene razón, con '' en su lugar, usted (y 'svcutil', también) pueden obtener el WSDL de la URL sin ningún punto final MEX presente, por lo que probablemente realmente no es necesario, siempre y cuando su servicio publique públicamente un WSDL –

7

Ésta parece ser útil en la siguiente situación ...

<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> 

No hay extremos HTTP definidos y se puede obtener a su servicio en las siguientes maneras. ..

- Browser: http://localhost/WCFService/Service.svc  
- svcutil.exe net.tcp://localhost:8080/WCFService/Service.svc/mex 

Si comenta el punto final MEX, ninguno de los dos funcionará.

Se pregunta por qué los metadatos aún se pueden ver en el navegador como

a) no tengo un punto final HTTP y b) he puesto en concreto ...

<serviceMetadata httpGetEnabled="false" /> 

la razón de esto es que en la configuración avanzada de la página web que tenía los siguientes protocolos se definen para la habilitada en configuración avanzada ...

http,net.tcp

Si elimina http, los metadatos no se pueden ver en el navegador. Parecería que es en este escenario, un sitio web habilitado para net.tcp, que necesita el punto final mex.

1

Los puntos finales MEX son puntos finales especiales que permiten a los clientes recibir los metadatos del servicio mediante el uso de mensajes SOAP en lugar de solicitudes de obtención de http. Puede crear un punto final MEX al que se pueda acceder a través de http, https, tcp e incluso los conductos con nombre.

La respuesta que recibirá cuando llame a la operación GetMetadata de un punto final MEX incluirá el contenido del WSDL y todos los archivos XSD que están vinculados a él.

Cuestiones relacionadas