2011-09-02 11 views
20

Mi chiedevo perché ho bisogno di dichiarare questo:Perché ho bisogno sia di mex endpoint che di httpGetEnable?

<serviceMetadata httpGetEnabled="true" /> 

e anche questo

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

se uso solo il primo - si sta lavorando via browser. quindi perché ho bisogno del secondo?

Potete darmi esempio per favore per la situazione che dovrò usare quest'ultimo?

+2

Buona domanda.+1 – Lijo

risposta

18

È necessario

  • attivare il servizio di pubblicare i metadati a tutti (che è il serviceMetadata comportamento) - ma non è necessario il httpGetEnabled - che è opzionale

  • hanno un posto (endpoint) dove un cliente che chiede informazioni può prendere quei metadati del servizio: questo è l'endpoint MEX . Questo è per un formato leggibile dalla macchina dei metadati, che Visual Studio o svcutil possono usare per creare un client. Non è destinato al consumo umano

+0

ma può farlo anche senza l'endpoint mex, intendendo per wsdl ... quindi? –

+0

Se ometto "mex endoint" - il "svcutil" non sarà in grado di afferrarlo? –

+0

@ mid787: sembra che tu abbia ragione - con '' in posizione, tu (e 'svcutil', anche) puoi ottenere il WSDL dall'URL senza alcun endpoint MEX presente - quindi probabilmente Davvero non ne ho bisogno, se il tuo servizio pubblica pubblicamente un WSDL –

7

Questo sembra essere utile nella seguente situazione ...

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

ci sono endpoint HTTP definiti e si può arrivare al vostro servizio nei seguenti modi. ..

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

Se si commento fuori l'endpoint MEX allora né funzionerà.

vi chiedete perché i meta-dati sono ancora visibili nel browser come

a) non ho un endpoint HTTP e b) ho specificamente previsto ...

<serviceMetadata httpGetEnabled="false" /> 

la ragione di questo è che nelle impostazioni avanzate per il sito web che avevo per protocolli abilitati in impostazioni avanzate le seguenti definito ...

http,net.tcp

Se si rimuove http, i metadati non possono essere visualizzati nel browser. Sembrerebbe che sia in questo scenario, un sito web abilitato net.tcp, che sia necessario l'endpoint mex.

1

Gli endpoint MEX sono endpoint speciali che consentono ai client di ricevere i metadati del servizio utilizzando i messaggi SOAP anziché le richieste HTTP get. È possibile creare endpoint MEX a cui è possibile accedere tramite http, https, tcp e anche named pipe.

La risposta che riceverete al momento della chiamata operazione GetMetadata di un endpoint MEX includerà il contenuto del WSDL e tutti i file XSD che sono collegati ad esso.

Problemi correlati