Megosztás a következőn keresztül:


Útmutató: Metaadatok közzététele szolgáltatáshoz konfigurációs fájl használatával

Ez egyike annak a két útmutató témakörnek, amelyek a Windows Communication Foundation (WCF) szolgáltatás metaadatainak közzétételét mutatják be. Kétféleképpen adhatja meg, hogy a szolgáltatás hogyan tegye közzé a metaadatokat egy konfigurációs fájl használatával és kód használatával. Ez a témakör bemutatja, hogyan tehet közzé metaadatokat egy szolgáltatáshoz konfigurációs fájl használatával.

Figyelemfelhívás

Ez a témakör bemutatja, hogyan tehetők közzé a metaadatok nem biztonságos módon. Bármely ügyfél lekérheti a metaadatokat a szolgáltatásból. Ha a szolgáltatásnak biztonságos módon kell közzétennie a metaadatokat, tekintse meg az egyéni biztonságos metaadatok végpontját.

További információ a metaadatok kódban való közzétételéről: How to: Publish Metadata for a Service Using Code. A metaadatok közzététele lehetővé teszi az ügyfelek számára a metaadatok lekérését WS-Transfer GET kérés vagy HTTP/GET kérés használatával a lekérdezési ?wsdl sztring használatával. A kód működésének ellenőrzéséhez hozzon létre egy alapszintű WCF-szolgáltatást. Az egyszerűség kedvéért az alábbi kód egy alapszintű, saját üzemeltetésű szolgáltatást biztosít.

using System;  
using System.Runtime.Serialization;  
using System.ServiceModel;  
using System.ServiceModel.Description;  
  
namespace Metadata.Samples  
{  
    [ServiceContract]  
    public interface ISimpleService  
    {  
        [OperationContract]  
        string SimpleMethod(string msg);  
    }  
  
    class SimpleService : ISimpleService  
    {  
        public string SimpleMethod(string msg)  
        {  
            Console.WriteLine("The caller passed in " + msg);  
            return "Hello " + msg;  
        }  
    }  
  
    class Program  
    {  
        static void Main(string[] args)  
        {  
            ServiceHost host = new ServiceHost(typeof(SimpleService),  
                new Uri("http://localhost:8001/MetadataSample"));
            try  
            {  
                // Open the service host to accept incoming calls  
                host.Open();  
  
                // The service can now be accessed.  
                Console.WriteLine("The service is ready.");  
                Console.WriteLine("Press <ENTER> to terminate service.");  
                Console.WriteLine();  
                Console.ReadLine();  
  
                // Close the ServiceHostBase to shutdown the service.  
                host.Close();  
            }  
            catch (CommunicationException commProblem)  
            {  
                Console.WriteLine("There was a communication problem. " + commProblem.Message);  
                Console.Read();  
            }  
        }  
    }  
}  

Ez a szolgáltatás egy saját üzemeltetésű szolgáltatás, amely konfigurációs fájl használatával van konfigurálva. A következő konfigurációs fájl kiindulópontként szolgál.

<configuration>  
  <system.serviceModel>  
    <services>  
      <service name="Metadata.Example.SimpleService">  
        <endpoint address=""  
                  binding="basicHttpBinding"  
                  contract="Metadata.Example.ISimpleService" />  
      </service>  
    </services>  
    <behaviors>  
  
    </behaviors>  
  </system.serviceModel>  
</configuration>  

WCF-szolgáltatás metaadatainak közzététele alkalmazáskonfigurációs fájl használatával

  1. Az App.config fájlban a záró </services> elem után hozzon létre egy <behaviors> elemet.

  2. Az elemen <behaviors> belül adjon hozzá egy <serviceBehaviors> elemet.

  3. Adjon hozzá egy <behavior> elemet az <serviceBehaviors> elemhez, és adja meg az name<behavior> elem attribútumának értékét.

  4. <serviceMetadata> Elem hozzáadása az <behavior> elemhez. Állítsa be az httpGetEnabled attribútumot true és az attribútumot a policyVersion Policy15-be. httpGetEnabled lehetővé teszi, hogy a szolgáltatás válaszoljon a HTTP GET-kérés által küldött metaadat-kérelmekre. policyVersion a szolgáltatás a metaadatok létrehozásakor a WS-Policy 1.5-nek való megfelelésre utasítja.

  5. Adjon hozzá egy behaviorConfiguration attribútumot az <service> elemhez, és adja meg az name<behavior> 1. lépésben hozzáadott elem attribútumát az alábbi kód példában látható módon.

    <services>  
      <service  
          name="Metadata.Example.SimpleService"  
          behaviorConfiguration="SimpleServiceBehavior">  
        ...  
      </service>  
    </services>  
    <behaviors>  
      <serviceBehaviors>  
        <behavior name="SimpleServiceBehavior">  
          <serviceMetadata httpGetEnabled="True" policyVersion="Policy15" />  
        </behavior>  
      </serviceBehaviors>  
    </behaviors>  
    
  6. Adjon hozzá egy vagy több <endpoint> olyan elemet, amelynek a szerződése a IMetadataExchangekövetkező kód példában látható.

    <services>  
      <service  
          name="Metadata.Example.SimpleService"  
          behaviorConfiguration="SimpleServiceBehavior">  
    
        <endpoint address=""  
                  binding="wsHttpBinding"  
                  contract="Metadata.Example.ISimpleService" />  
    
        <endpoint address="mex"  
                  binding="mexHttpBinding"  
                  contract="IMetadataExchange" />  
      </service>  
    </services>  
    
  7. Az előző lépésben hozzáadott metaadat-végpontok esetében állítsa az attribútumot az binding alábbiak egyikére:

    • mexHttpBinding HTTP-közzétételhez.

    • mexHttpsBinding HTTPS-közzétételhez.

    • mexNamedPipeBinding a nevesített csőkiadóhoz.

    • mexTcpBinding TCP-közzétételhez.

  8. Az előző lépésben hozzáadott metaadat-végpontok esetében állítsa be a következő címmel egyenlő címet:

    • Üres sztring a gazdaalkalmazás alapcímének közzétételi pontként való használatához, ha az alapcím megegyezik a metaadat-kötéssel.

    • Relatív cím, ha a gazdaalkalmazás alapcímmel rendelkezik.

    • Abszolút cím.

  9. Buildelje és futtassa a konzolalkalmazást.

  10. Keresse meg a szolgáltatás alapcímét (http://localhost:8001/MetadataSample ebben a mintában), és ellenőrizze, hogy be van-e kapcsolva a metaadat-közzététel. Ha nem, az eredményül kapott oldal tetején egy üzenet jelenik meg: "A szolgáltatás metaadatainak közzététele jelenleg le van tiltva."

Alapértelmezett végpontok használata

  1. Ha alapértelmezett végpontokat használó szolgáltatás metaadatait szeretné konfigurálni, adja meg a ServiceMetadataBehavior konfigurációs fájlban az előző példához hasonlóan, de ne adjon meg végpontokat. A konfigurációs fájl így fog kinézni.

    <configuration>  
      <system.serviceModel>  
        <behaviors>  
          <serviceBehaviors>  
            <behavior name="SimpleServiceBehavior">  
              <serviceMetadata httpGetEnabled="True" policyVersion="Policy12" />  
            </behavior>  
          </serviceBehaviors>  
        </behaviors>  
    
      </system.serviceModel>  
    </configuration>  
    

    Mivel a szolgáltatás rendelkezik ServiceMetadataBehavior a beállított trueértékekkelhttpGetEnabled, a szolgáltatás engedélyezte a metaadatok közzétételét, és mivel nincsenek explicit módon hozzáadott végpontok, a futtatókörnyezet hozzáadja az alapértelmezett végpontokat. Az alapértelmezett végpontokkal, kötésekkel és viselkedésekkel kapcsolatos további információkért lásd a WCF-szolgáltatások egyszerűsített konfigurációját és egyszerűsített konfigurációját.

Példa

Az alábbi példakód egy alapszintű WCF-szolgáltatás megvalósítását és a szolgáltatás metaadatait közzétevő konfigurációs fájlt mutatja be.

using System;  
using System.Runtime.Serialization;  
using System.ServiceModel;  
using System.ServiceModel.Description;  
  
namespace Metadata.Samples  
{  
    [ServiceContract]  
    public interface ISimpleService  
    {  
        [OperationContract]  
        string SimpleMethod(string msg);  
    }  
  
    class SimpleService : ISimpleService  
    {  
        public string SimpleMethod(string msg)  
        {  
            Console.WriteLine("The caller passed in " + msg);  
            return "Hello " + msg;  
        }  
    }  
  
    class Program  
    {  
        static void Main(string[] args)  
        {  
            ServiceHost host = new ServiceHost(typeof(SimpleService),  
                new Uri("http://localhost:8001/MetadataSample"));
            try  
            {  
                // Open the service host to accept incoming calls  
                host.Open();  
  
                // The service can now be accessed.  
                Console.WriteLine("The service is ready.");  
                Console.WriteLine("Press <ENTER> to terminate service.");  
                Console.WriteLine();  
                Console.ReadLine();  
  
                // Close the ServiceHostBase to shutdown the service.  
                host.Close();  
            }  
            catch (CommunicationException commProblem)  
            {  
                Console.WriteLine("There was a communication problem. " + commProblem.Message);  
                Console.Read();  
            }  
        }  
    }  
}  
<configuration>  
  <system.serviceModel>  
    <behaviors>  
      <serviceBehaviors>  
        <behavior name="SimpleServiceBehavior">  
          <serviceMetadata httpGetEnabled="True" policyVersion="Policy12" />  
          <serviceDebug includeExceptionDetailInFaults="False" />  
        </behavior>  
      </serviceBehaviors>  
    </behaviors>  
  </system.serviceModel>  
</configuration>  

Lásd még