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


Végpontlétrehozás áttekintése

A Windows Communication Foundation (WCF) szolgáltatással folytatott összes kommunikáció a szolgáltatás végpontjain keresztül történik. A végpontok hozzáférést biztosítanak az ügyfeleknek a WCF szolgáltatás által kínált funkciókhoz. Ez a szakasz egy végpont struktúráját ismerteti, és ismerteti, hogyan definiálhat végpontokat konfigurációban és kódban.

Egy végpont felépítése

Minden végpont tartalmaz egy címet, amely jelzi a végpont helyét, egy kötést, amely meghatározza, hogy az ügyfél hogyan kommunikálhat a végponttal, valamint egy szerződést, amely azonosítja az elérhető módszereket.

  • Cím. A cím egyedileg azonosítja a végpontot, és tájékoztatja a potenciális fogyasztókat arról, hogy hol található a szolgáltatás. A WCF-objektummodellben EndpointAddress a cím jelöli, amely egy egységes erőforrás-azonosítót (URI) és címtulajdonságokat tartalmaz, amelyek identitást, néhány webszolgáltatás-leírási nyelvet (WSDL) és opcionális fejlécgyűjteményt tartalmaznak. Az opcionális fejlécek további részletes címzési információkat nyújtanak a végpont azonosításához vagy kezeléséhez. További információ: Végpontcím megadása.

  • Kötés. A kötés meghatározza, hogyan kommunikálhat a végponttal. A kötés meghatározza, hogy a végpont hogyan kommunikál a világgal, beleértve a használni kívánt átviteli protokollt (például TCP- vagy HTTP-protokollt), az üzenetek kódolását (például szöveg vagy bináris), és hogy mely biztonsági követelmények szükségesek (például a Secure Sockets Layer [SSL] vagy a SOAP üzenetbiztonság). További információ: A szolgáltatások és ügyfelek konfigurálása kötések használatával.

  • Szolgáltatási szerződés. A szolgáltatási szerződés ismerteti, hogy a végpont milyen funkciókat tesz elérhetővé az ügyfél számára. A szerződés meghatározza az ügyfél által meghívható műveleteket, az üzenet formáját, a művelet meghívásához szükséges bemeneti paraméterek vagy adatok típusát, valamint az ügyfél által várt feldolgozási vagy válaszüzenet típusát. Három alapszintű szerződéstípus felel meg az egyszerű üzenetcsere-mintáknak (EP-képviselők): datagram (egyirányú), kérés/válasz és kétirányú (kétirányú). A szolgáltatási szerződés adat- és üzenetszerződéseket is alkalmazhat, amelyek meghatározott adattípusokat és üzenetformátumokat igényelnek a hozzáféréskor. A szolgáltatási szerződések definiálásáról további információt a Szolgáltatásszerződések tervezése című témakörben talál. Vegye figyelembe, hogy az ügyfélnek szüksége lehet egy szolgáltatás által meghatározott, visszahívási szerződésnek nevezett szerződés implementálására is a szolgáltatástól érkező üzenetek kétoldalas európai parlamenti képviselőben való fogadásához. További információ: Duplex Services.

A szolgáltatás végpontja kód használatával vagy deklaratív módon, konfigurációval határozható meg. Ha nincs megadva végpont, akkor a futtatókörnyezet az alapértelmezett végpontokat úgy biztosítja, hogy minden egyes szolgáltatásszerződéshez hozzáad egy alapértelmezett végpontot a szolgáltatás által implementált minden egyes szolgáltatási szerződéshez. A végpontok kódban való definiálása általában nem praktikus, mivel az üzembe helyezett szolgáltatások kötései és címei általában eltérnek a szolgáltatás fejlesztése során használtaktól. Általában célszerűbb a szolgáltatásvégpontokat konfigurációval definiálni kód helyett. A kötés és az információk kódon kívüli kezelése lehetővé teszi a módosítást anélkül, hogy újrafordítanák és újra üzembe kellene helyezniük az alkalmazást.

Feljegyzés

Megszemélyesítést végző szolgáltatásvégpont hozzáadásakor vagy az AddServiceEndpoint egyik metódust vagy a GetContract(Type, Type) metódust kell használnia a szerződés új ServiceDescription objektumba való megfelelő betöltéséhez.

Végpontok definiálása a Kódban

Az alábbi példa bemutatja, hogyan adhat meg végpontot a kódban a következőkkel:

  • Adjon meg egy szerződést egy IEcho olyan szolgáltatástípushoz, amely elfogadja valaki nevét és visszhangját a "Hello <name>!" válaszsal.

  • Echo A szerződés által IEcho meghatározott típusú szolgáltatás megvalósítása.

  • Adja meg a szolgáltatás végpontcímét http://localhost:8000/Echo .

  • Konfigurálja a Echo szolgáltatást kötéssel WSHttpBinding .

namespace Echo
{
   // Define the contract for the IEcho service
   [ServiceContract]
   public interface IEcho
   {
       [OperationContract]
       String Hello(string name)
   }

   // Create an Echo service that implements IEcho contract
   class Echo : IEcho
   {
      public string Hello(string name)
      {
         return "Hello" + name + "!";
      }
      public static void Main ()
      {
          //Specify the base address for Echo service.
          Uri echoUri = new Uri("http://localhost:8000/");

          //Create a ServiceHost for the Echo service.
          ServiceHost serviceHost = new ServiceHost(typeof(Echo),echoUri);

          // Use a predefined WSHttpBinding to configure the service.
          WSHttpBinding binding = new WSHttpBinding();

          // Add the endpoint for this service to the service host.
          serviceHost.AddServiceEndpoint(
             typeof(IEcho),
             binding,
             echoUri
           );

          // Open the service host to run it.
          serviceHost.Open();
     }
  }
}
' Define the contract for the IEcho service
    <ServiceContract()> _
    Public Interface IEcho
        <OperationContract()> _
        Function Hello(ByVal name As String) As String
    End Interface

' Create an Echo service that implements IEcho contract
    Public Class Echo
        Implements IEcho
        Public Function Hello(ByVal name As String) As String _
 Implements ICalculator.Hello
            Dim result As String = "Hello" + name + "!"
            Return result
        End Function

' Specify the base address for Echo service.
Dim echoUri As Uri = New Uri("http://localhost:8000/")

' Create a ServiceHost for the Echo service.
Dim svcHost As ServiceHost = New ServiceHost(GetType(HelloWorld), echoUri)

' Use a predefined WSHttpBinding to configure the service.
Dim binding As New WSHttpBinding()

' Add the endpoint for this service to the service host.
serviceHost.AddServiceEndpoint(GetType(IEcho), binding, echoUri)

' Open the service host to run it.
serviceHost.Open()

Feljegyzés

A szolgáltatás gazdagépe alapcímmel jön létre, majd a többi cím az alapcímhez viszonyítva egy végpont részeként van megadva. A cím particionálása lehetővé teszi több végpont kényelmesebb definiálását egy gazdagép szolgáltatásai számára.

Feljegyzés

ServiceDescription A szolgáltatásalkalmazás tulajdonságai nem módosíthatók a OnOpening következő metódus ServiceHostBaseután: . Egyes tagok, például a Credentials tulajdonság és a AddServiceEndpoint metódusok ServiceHostBaseServiceHostkivételt adnak, ha ezen a ponton módosítják. Mások engedélyezik a módosításukat, de az eredmény nincs meghatározva.

Hasonlóképpen, az ügyfélen az ServiceEndpoint értékek nem módosíthatók a hívás OnOpening után a ChannelFactory. A Credentials tulajdonság kivételt eredményez, ha az adott ponton már módosult. A többi ügyfélleírási érték hiba nélkül módosítható, de az eredmény nincs meghatározva.

Akár a szolgáltatás, akár az ügyfél esetében, javasoljuk, hogy a hívás Openelőtt módosítsa a leírást.

Végpontok meghatározása a konfigurációban

Alkalmazás létrehozásakor gyakran érdemes elhalasztani a döntéseket az alkalmazást üzembe helyező rendszergazdára. Például gyakran nem lehet előre tudni, hogy mi lesz a szolgáltatás címe (URI). A cím kemény kódolása helyett célszerű engedélyezni a rendszergazda számára, hogy ezt a szolgáltatás létrehozása után tegye meg. Ez a rugalmasság konfigurációval érhető el. További részletekért lásd a Szolgáltatások konfigurálása című témakört.

Feljegyzés

A ServiceModel metadata segédprogram (Svcutil.exe) és a/config: fájlnév fájlnév[,] kapcsolójával gyorsan létrehozhat konfigurációs fájlokat.

Alapértelmezett végpontok használata

Ha nincs megadva végpont a kódban vagy a konfigurációban, akkor a futtatókörnyezet az alapértelmezett végpontokat úgy biztosítja, hogy minden szolgáltatásszerződéshez hozzáad egy alapértelmezett végpontot a szolgáltatás által implementált minden egyes szolgáltatási szerződéshez. Az alapcím megadható kódban vagy konfigurációban, és az alapértelmezett végpontok hozzáadódnak, amikor Open() a rendszer meghívja a ServiceHost. Ez a példa ugyanaz, mint az előző szakaszban, de mivel nincs megadva végpont, a rendszer hozzáadja az alapértelmezett végpontokat.

namespace Echo
{
   // Define the contract for the IEcho service
   [ServiceContract]
   public interface IEcho
   {
       [OperationContract]
       String Hello(string name)
   }

   // Create an Echo service that implements IEcho contract
   public class Echo : IEcho
   {
      public string Hello(string name)
      {
         return "Hello" + name + "!";
      }
      public static void Main ()
      {
          //Specify the base address for Echo service.
          Uri echoUri = new Uri("http://localhost:8000/");

          //Create a ServiceHost for the Echo service.
          ServiceHost serviceHost = new ServiceHost(typeof(Echo),echoUri);

          // Open the service host to run it. Default endpoints
          // are added when the service is opened.
          serviceHost.Open();
     }
  }
}
' Define the contract for the IEcho service
    <ServiceContract()> _
    Public Interface IEcho
        <OperationContract()> _
        Function Hello(ByVal name As String) As String
    End Interface

' Create an Echo service that implements IEcho contract
    Public Class Echo
        Implements IEcho
        Public Function Hello(ByVal name As String) As String _
 Implements ICalculator.Hello
            Dim result As String = "Hello" + name + "!"
            Return result
        End Function

' Specify the base address for Echo service.
Dim echoUri As Uri = New Uri("http://localhost:8000/")

' Open the service host to run it. Default endpoints
' are added when the service is opened.
serviceHost.Open()

Ha a végpontok explicit módon vannak megadva, az alapértelmezett végpontok továbbra is hozzáadhatók a ServiceHost hívás Openelőtti hívássalAddDefaultEndpoints. Az alapértelmezett végpontokról további információt a WCF-szolgáltatások egyszerűsített konfigurációja és egyszerűsített konfigurációja című témakörben talál.

Lásd még