Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Bu konu başlığında kanal fabrikalarının ve kanalların oluşturulması ele alınmaktadır.
Kanal Fabrikaları ve Kanallar
Kanal fabrikaları kanal oluşturmakla sorumludur. Kanal fabrikaları tarafından oluşturulan kanallar ileti göndermek için kullanılır. Bu kanallar, iletiyi yukarıdaki katmandan almaktan, gerekli işlemeyi gerçekleştirmekten ve ardından iletiyi aşağıdaki katmana göndermekten sorumludur. Aşağıdaki grafikte bu işlem gösterilmektedir.
Kanal fabrikası kanallar oluşturur.
Kapatıldığında, kanal fabrikaları oluşturdukları ve henüz kapatılmayan tüm kanalları kapatmakla sorumludur. Burada modelin asimetrik olduğunu unutmayın çünkü bir kanal dinleyicisi kapatıldığında yalnızca yeni kanalları kabul etme işlemini durdurur, ancak iletileri almaya devam edebilmeleri için mevcut kanalları açık bırakır.
WCF, bu işlem için temel sınıf yardımcıları sağlar. (Bu konuda ele alınan kanal yardımcı sınıflarının diyagramı için bkz. Kanal Modeline Genel Bakış.)
CommunicationObject sınıfı ICommunicationObject'i uygular ve Kanal Geliştirme'nin 2. adımında açıklanan durum makinesini dayatır.
ChannelManagerBase sınıfı CommunicationObject uygular ve System.ServiceModel.Channels.ChannelFactoryBase ve System.ServiceModel.Channels.ChannelListenerBase için birleştirilmiş bir temel sınıf sağlar. ChannelManagerBase sınıfı ile ChannelBasebirlikte çalışır ve bunu uygulayan IChannelbir temel sınıftır.
sınıfı ve öğelerini uygular ve yüklemelerini tek bir soyut yöntemde birleştirir.
ChannelListenerBase sınıfı IChannelListener uygular. Temel durum yönetimini sağlar.
Aşağıdaki tartışma, Aktarım: UDP örneğini temel alır.
Kanal Fabrikası Oluşturma
UdpChannelFactory
, ChannelFactoryBase'den türetilir. İleti kodlayıcısının sürümüne erişim sağlamak için örnek GetProperty'ü aşar. Örnek ayrıca, durum makinesi geçiş yaparken örneğimizi OnClose sonlandırmak için BufferManager'ı geçersiz kılar.
UDP Çıkış Kanalı
UdpOutputChannel
IOutputChannel uygular. Oluşturucu, bağımsız değişkenleri doğrular ve iletilen EndPoint öğesine göre bir hedef EndpointAddress nesnesi oluşturur.
OnOpen iptali, bu EndPoint öğesine mesaj göndermek için kullanılan bir soket oluşturur.
this.socket = new Socket(
this.remoteEndPoint.AddressFamily,
SocketType.Dgram,
ProtocolType.Udp
);
Kanal zarif bir şekilde veya zarif olmayan bir şekilde kapatılabilir. Kanal düzgün bir şekilde kapatılırsa yuva kapatılır ve temel sınıf OnClose
yöntemine bir çağrı yapılır. Bu bir özel durum oluşturursa, altyapı Abort
'yi çağırır ki kanal temizlenmiş olsun.
this.socket.Close();
base.OnClose(timeout);
Send()
ve BeginSend()
/EndSend()
uygula. Bu iki ana bölüme ayrılır. önce iletiyi bir bayt dizisine seri hale getirme:
ArraySegment<byte> messageBuffer = EncodeMessage(message);
Ardından elde edilen verileri kabloya gönderin:
this.socket.SendTo(
messageBuffer.Array,
messageBuffer.Offset,
messageBuffer.Count,
SocketFlags.None,
this.remoteEndPoint
);