Ú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
Az App.config fájlban a záró
</services>
elem után hozzon létre egy<behaviors>
elemet.Az elemen
<behaviors>
belül adjon hozzá egy<serviceBehaviors>
elemet.Adjon hozzá egy
<behavior>
elemet az<serviceBehaviors>
elemhez, és adja meg azname
<behavior>
elem attribútumának értékét.<serviceMetadata>
Elem hozzáadása az<behavior>
elemhez. Állítsa be azhttpGetEnabled
attribútumottrue
és az attribútumot apolicyVersion
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.Adjon hozzá egy
behaviorConfiguration
attribútumot az<service>
elemhez, és adja meg azname
<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>
Adjon hozzá egy vagy több
<endpoint>
olyan elemet, amelynek a szerződése aIMetadataExchange
kö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>
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.
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.
Buildelje és futtassa a konzolalkalmazást.
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
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>