Aracılığıyla paylaş


Uç Noktası Oluşturma Genel Bakış

Bir Windows Communication Foundation (WCF) hizmetiyle tüm iletişim, hizmetin uç noktaları üzerinden gerçekleşir. Uç noktalar, istemcilere BIR WCF hizmetinin sunduğu işlevlere erişim sağlar. Bu bölümde bir uç noktanın yapısı açıklanır ve yapılandırmada ve kodda bir uç noktanın nasıl tanımlanacağı özetlenmiştir.

Uç Noktanın Yapısı

Her uç nokta uç noktanın nerede bulunabileceğini belirten bir adres, bir istemcinin uç noktayla nasıl iletişim kurabileceğini belirten bir bağlama ve kullanılabilir yöntemleri tanımlayan bir sözleşme içerir.

  • Adres. Adres, uç noktayı benzersiz olarak tanımlar ve potansiyel tüketicilere hizmetin nerede olduğunu söyler. WCF nesne modelinde, tekdüzen Kaynak Tanımlayıcısı (URI) ve kimlik içeren adres özellikleri, bazı Web Hizmetleri Açıklama Dili (WSDL) öğeleri ve isteğe bağlı üst bilgiler koleksiyonu içeren adresle EndpointAddress temsil edilir. İsteğe bağlı üst bilgiler, uç noktayı tanımlamak veya bunlarla etkileşime geçmek için ek ayrıntılı adresleme bilgileri sağlar. Daha fazla bilgi için bkz . Uç Nokta Adresi Belirtme.

  • Bağlama. Bağlama, uç noktayla nasıl iletişim kuracaklarını belirtir. Bağlama, uç noktanın dünyayla nasıl iletişim kuracaklarını, kullanılacak aktarım protokollerini (örneğin TCP veya HTTP), iletiler için kullanılacak kodlamayı (örneğin, metin veya ikili) ve hangi güvenlik gereksinimlerinin gerekli olduğunu (örneğin, Güvenli Yuva Katmanı [SSL] veya SOAP ileti güvenliği) belirtir. Daha fazla bilgi için bkz . Hizmetleri ve İstemcileri Yapılandırmak için Bağlamaları Kullanma.

  • Hizmet sözleşmesi. Hizmet sözleşmesi, uç noktanın istemciye hangi işlevleri kullanıma sunmasını özetler. Sözleşme, bir istemcinin çağırabileceği işlemleri, iletinin biçimini ve işlemi çağırmak için gereken giriş parametrelerinin veya verilerin türünü ve istemcinin bekleyebilecek işleme veya yanıt iletisinin türünü belirtir. Üç temel sözleşme türü temel ileti değişimi desenlerine (MEP' ler) karşılık gelir: veri birimi (tek yönlü), istek/yanıt ve çift yönlü (çift yönlü). Hizmet sözleşmesi, erişilirken belirli veri türlerini ve ileti biçimlerini gerektirmek için veri ve ileti sözleşmelerini de kullanabilir. Hizmet sözleşmesi tanımlama hakkında daha fazla bilgi için bkz . Hizmet Sözleşmeleri Tasarlama. İstemcinin, hizmetten çift yönlü bir MEP'te ileti almak için geri çağırma sözleşmesi olarak adlandırılan hizmet tanımlı bir sözleşmeyi uygulaması da gerekebileceğini unutmayın. Daha fazla bilgi için bkz . Çift Yönlü Hizmetler.

Bir hizmetin uç noktası, kod kullanılarak kesin olarak veya yapılandırma aracılığıyla bildirim temelli olarak belirtilebilir. Hiçbir uç nokta belirtilmezse çalışma zamanı, hizmet tarafından uygulanan her hizmet sözleşmesi için her temel adres için bir varsayılan uç nokta ekleyerek varsayılan uç noktalar sağlar. Dağıtılan bir hizmetin bağlamaları ve adresleri genellikle hizmet geliştirilirken kullanılanlardan farklı olduğundan, kodda uç noktaları tanımlamak genellikle pratik değildir. Genellikle, kod yerine yapılandırma kullanarak hizmet uç noktalarını tanımlamak daha pratiktir. Bağlama ve adresleme bilgilerinin kod dışında tutulması, uygulamanın yeniden derlenmesi ve yeniden dağıtılması gerekmeden bunların değişmesine olanak tanır.

Not

Kimliğe bürünme gerçekleştiren bir hizmet uç noktası eklerken, sözleşmeyi yeni ServiceDescription bir nesneye AddServiceEndpoint düzgün bir şekilde yüklemek için yöntemlerden birini veya GetContract(Type, Type) yöntemini kullanmanız gerekir.

Kodda Uç Noktaları Tanımlama

Aşağıdaki örnek, kodda aşağıdakilerle bir uç noktanın nasıl belirtileceğini gösterir:

  • Birinin adını kabul eden ve "Merhaba <ad>!" yanıtıyla yankı veren bir IEcho hizmet türü için bir sözleşme tanımlayın.

  • Sözleşme tarafından IEcho tanımlanan türde bir Echo hizmet uygulayın.

  • Hizmet için bir uç nokta adresi http://localhost:8000/Echo belirtin.

  • Echo Bağlama kullanarak WSHttpBinding hizmeti yapılandırın.

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

Not

Hizmet konağı bir temel adresle oluşturulur ve ardından temel adrese göre adresin geri kalanı bir uç noktanın parçası olarak belirtilir. Adresin bu bölümlenmesi, bir konakta hizmetler için birden çok uç noktanın daha rahat tanımlanmasını sağlar.

Not

ServiceDescription Hizmet uygulamasındaki özellikleri üzerindeki yönteminden OnOpeningServiceHostBasesonra değiştirilmemelidir. ve üzerindeki özelliği ve AddServiceEndpoint yöntemleri ServiceHostBaseServiceHostgibi Credentials bazı üyeler, bu noktadan sonra değiştirilirse bir özel durum oluşturur. Diğerleri bunları değiştirmenize izin verir, ancak sonuç tanımlanmamıştır.

Benzer şekilde, istemcide ServiceEndpoint üzerinde çağrısından OnOpeningChannelFactorysonra değerler değiştirilmemelidir. özelliği, Credentials bu noktadan sonra değiştirilirse bir özel durum oluşturur. Diğer istemci açıklaması değerleri hatasız olarak değiştirilebilir, ancak sonuç tanımlanmamıştır.

hizmet veya istemci için, çağrısından Openönce açıklamayı değiştirmeniz önerilir.

Yapılandırmada Uç Noktaları Tanımlama

Uygulama oluştururken, genellikle kararları uygulamayı dağıtan yöneticiye ertelemek istersiniz. Örneğin, genellikle bir hizmet adresinin (URI) ne olacağını önceden bilmenin hiçbir yolu yoktur. Bir adresi sabit kodlamak yerine, bir yöneticinin hizmet oluşturduktan sonra bunu gerçekleştirmesine izin vermek tercih edilir. Bu esneklik yapılandırma yoluyla gerçekleştirilir. Ayrıntılar için bkz . Hizmetleri Yapılandırma.

Varsayılan Uç Noktaları Kullanma

Kodda veya yapılandırmada hiçbir uç nokta belirtilmezse çalışma zamanı, hizmet tarafından uygulanan her hizmet sözleşmesi için her temel adres için bir varsayılan uç nokta ekleyerek varsayılan uç noktalar sağlar. Temel adres kodda veya yapılandırmada belirtilebilir ve üzerinde çağrıldığında Open()ServiceHostvarsayılan uç noktalar eklenir. Bu örnek önceki bölümdeki örnekle aynıdır, ancak hiçbir uç nokta belirtilmediğinden varsayılan uç noktalar eklenir.

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

Uç noktalar açıkça sağlanmışsa, çağrısından önce Openüzerinde ServiceHost çağrılarak AddDefaultEndpoints varsayılan uç noktalar eklenebilir. Varsayılan uç noktalar hakkında daha fazla bilgi için bkz. WCF Hizmetleri için Basitleştirilmiş Yapılandırma ve Basitleştirilmiş Yapılandırma.

Ayrıca bkz.