Pourquoi ai-je besoin à la fois DE mex endpoint et de httpGetEnable?

Je me demandais pourquoi dois-je déclarer ceci:

 <serviceMetadata httpGetEnabled="true" />

Et aussi ce

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

Si je n'utilise que le premier - Il fonctionne via le navigateur. alors, pourquoi ai-je besoin du second ?

Pouvez-vous me donner un exemple svp pour la situation que je vais devoir utiliser ce dernier ?

23
wcf
demandé sur Royi Namir 2011-09-02 19:27:32

3 réponses

Vous devez

  • Activer le service pour publier des métadonnées à tous (c'est la serviceMetadata comportement) - mais vous n'avez pas besoin de le httpGetEnabled - c'est facultatif

  • Avoir un endroit (point de terminaison) où un client curieux peut aller récupérer ces métadonnées de service - c'est le point de terminaison MEX. Ceci est pour un format lisible par machine des métadonnées-un que Visual Studio ou svcutil peut utiliser pour créer un client. Il n'est pas destiné à la consommation humaine

19
répondu marc_s 2011-09-02 15:30:48

Cela semble utile dans la situation suivante...

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

Aucun point de terminaison HTTP n'est défini et vous pouvez accéder à votre service de la manière suivante...

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

Si vous commentez le point de terminaison MEX, aucun ne fonctionnera.

, vous Vous demandez pourquoi les méta-données peuvent encore être vus dans le navigateur comme

A) Je N'ai pas de point de terminaison HTTP et b) j'ai spécifiquement mis ...

<serviceMetadata httpGetEnabled="false" />

La raison en est que dans les paramètres avancés pour le site Web que j'avais ce qui suit défini pour les Protocoles activés sous Paramètres avancés...

http,net.tcp

Si vous supprimez http, les métadonnées ne peuvent pas être vues dans le navigateur. Il semblerait que ce soit dans ce scénario, un filet.tcp activé uniquement le site Web, que vous avez besoin du point de terminaison mex.

8
répondu Remotec 2013-07-31 07:53:34

Les points de terminaison MEX sont des points de terminaison spéciaux qui permettent aux clients de recevoir les métadonnées du service en utilisant des messages SOAP au lieu de requêtes HTTP get. Vous pouvez créer un point de terminaison MEX accessible via http, https, tcp et même des canaux nommés.

La réponse que vous recevrez lors de l'appel de l'opération GETMETADATA D'un point de terminaison MEX inclura le contenu du WSDL et tous les fichiers XSD qui y sont liés.

2
répondu Taran 2014-12-04 12:06:28