2011-09-02 28 views
20

ben bu beyan etmek gerekiyor niye merak ediyorum:Neden hem mex bitiş noktasına hem de httpGetEnable'a ihtiyacım var?

<serviceMetadata httpGetEnabled="true" /> 

ve ayrıca bu

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

i sadece ilki kullanırsanız - tarayıcı üzerinden çalışıp çalışmadığını . neden ikincisine ihtiyacım var?

Bana örnek verebilir misiniz, ikincisini kullanmak zorunda kalacağım durum için lütfen? ancakhttpGetEnabled gerekmez - - o

  • bir yere sahip isteğe bağlıdır

  • +2

    İyi soru.+1 – Lijo

    cevap

    18

    Sen (yani serviceMetadata davranıştır) hiç meta yayınlamak için hizmeti etkinleştirmek

    • gerek (son nokta) bir sorgulama istemcisinin bu hizmet meta verilerini almasını sağlayabilir - bu, MEX son noktası. Bu, Visual Studio veya svcutil'in bir istemci oluşturmak için kullanabileceği meta verilerin makine tarafından okunabilir formatı içindir. Tanımlanmış HTTP bitiş noktaları vardır

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

      ... insan tüketimine

    +0

    ama bunu mex uç noktası olmadan da yapabilir, yani wsdl ... yani? –

    +0

    "mex bitiş noktası" kelimesini çıkarırsam - "svcutil" onu yakalayamaz mı? –

    +0

    @ mid787: doğru görünüyorsunuz - 'yerinde, siz (ve' svcutil'de), herhangi bir MEX son nokta olmadan WSDL’yi URL’den alabilirsiniz. Hizmetinizin bir WSDL –

    7

    Bu aşağıdaki durumda yararlı olduğu görülmektedir yönelik değil ve aşağıdaki yollarla hizmetinize alabilirsiniz. ..

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

    MEX son noktasını açıklarsanız, o zaman işe yaramaz.

    Meta veriler hala a) HTTP bitiş noktası ve b) Özellikle belirledik yok ...

    olarak tarayıcıda görülebilir neden merak

    <serviceMetadata httpGetEnabled="false" /> 
    

    Bunun nedeni ... web sitesi için gelişmiş ayarlarda ben Gelişmiş Ayarlar altında Etkin Protokoller için tanımlanan aşağıdaki zorunda olduğunu

    http,net.tcp

    http öğesini kaldırırsanız, meta veriler tarayıcıda görüntülenemez. Bu senaryoda, net.tcp'nin yalnızca web sitesi etkin olduğundan, mex bitiş noktasına ihtiyacınız olduğunu göreceksiniz.

    1

    MEX bitiş noktaları, istemcilerin http alma istekleri yerine SOAP iletilerini kullanarak hizmetin meta verilerini almasına olanak veren özel uç noktalarıdır. Http, https, tcp ve hatta adlandırılmış yöneltmeler aracılığıyla erişilebilen MEX uç noktası oluşturabilirsiniz.

    Bir MEX bitiş noktasında GetMetadata işlemi çağrılırken alacağınız yanıt, WSDL'nin içeriğini ve ona bağlı tüm XSD dosyalarını içerir.

    İlgili konular