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