Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Vazby a prvky vazby (objekty, které rozšiřují System.ServiceModel.Channels.Binding a System.ServiceModel.Channels.BindingElementv uvedeném pořadí) jsou místem, kde je aplikační model WCF (Windows Communication Foundation) přidružený k objektům pro vytváření kanálů a naslouchacím procesům kanálů. Bez vazeb vyžaduje použití vlastních kanálů programování na úrovni kanálu, jak je popsáno v části Programování Channel-Level služby a klientského Channel-Level programování. Toto téma popisuje minimální požadavek na povolení používání kanálu ve WCF, vývoj BindingElement kanálu a povolení použití z aplikace, jak je popsáno v kroku 4 vývoje kanálů.
Přehled
Vytvoření BindingElement pro váš kanál umožňuje vývojářům používat ho v aplikaci WCF. BindingElement Objekty lze z System.ServiceModel.ServiceHost třídy použít k připojení aplikace WCF k vašemu kanálu, aniž by bylo nutné přesné informace o typu kanálu.
BindingElement Po vytvoření můžete povolit další funkce v závislosti na vašich požadavcích podle zbývajících kroků vývoje kanálu popsaných v části Vývoj kanálů.
Přidání elementu vazby
Chcete-li implementovat vlastní BindingElement, napište třídu, která dědí z BindingElement. Pokud jste například vyvinuli ChunkingChannel , který umí rozdělit velké zprávy na části a znovu je sestavit na druhém konci, můžete tento kanál použít v libovolné vazbě implementací BindingElement a nastavením vazby k jeho použití. Zbývající část tohoto tématu používá ChunkingChannel jako příklad k předvedení požadavků implementace elementu vazby.
Někdo ChunkingBindingElement je zodpovědný za vytvoření ChunkingChannelFactory a ChunkingChannelListener. Přepíše implementace CanBuildChannelFactory a CanBuildChannelListener a zkontroluje, zda je parametr typu IDuplexSessionChannel (v našem příkladu je to jediný tvar kanálu podporovaný ChunkingChannel) a že ostatní prvky ve vazbě podporují tento tvar kanálu.
BuildChannelFactory nejprve zkontroluje, zda lze vytvořit požadovaný tvar kanálu, a poté získá seznam akcí zpracování zpráv k rozdělení na části. Pak vytvoří novou ChunkingChannelFactory a předá jí továrnu vnitřního kanálu. (Pokud vytváříte prvek vazby přenosu, je tento prvek posledním prvkem v zásobníku vazeb, a proto musí vytvořit posluchač kanálu nebo továrnu na kanály.)
BuildChannelListener má podobnou implementaci pro vytvoření ChunkingChannelListener a předání vnitřního kanálu posluchači.
Jako další příklad použití přenosového kanálu poskytuje ukázka Transport: UDP následující přepsání.
V ukázce je UdpTransportBindingElementelement vazby , který je odvozen od TransportBindingElement. Přepíše následující metody pro sestavení továren spojených s kanálem.
public IChannelFactory<TChannel> BuildChannelFactory<TChannel>(BindingContext context)
{
return (IChannelFactory<TChannel>)(object)new UdpChannelFactory(this, context);
}
public IChannelListener<TChannel> BuildChannelListener<TChannel>(BindingContext context)
{
return (IChannelListener<TChannel>)(object)new UdpChannelListener(this, context);
}
Obsahuje také členy pro klonování BindingElement a vrácení našeho schématu (soap.udp).
Elementy vazby protokolu
Nové prvky vazby mohou nahradit nebo rozšířit kterýkoli z zahrnutých prvků vazby, přidat nové přenosy, kódování nebo protokoly vyšší úrovně. Pokud chcete vytvořit nový element vazby protokolu, začněte rozšířením BindingElement třídy. Minimálně je nutné implementovat BindingElement.Clone a implementovat ChannelProtectionRequirements pomocí IChannel.GetProperty. Tím se vrátí ChannelProtectionRequirements pro tento element vazby. Další informace najdete v tématu ChannelProtectionRequirements.
Clone by měla vrátit novou kopii tohoto prvku vazby. Doporučujeme, aby autoři prvků vazby implementovali Clone pomocí kopírovacího konstruktoru, který volá základní kopírovací konstruktor, a poté klonovali všechna další pole v této třídě.
Prvky transportní vazby
Pokud chcete vytvořit nový element transportní vazby, rozšiřte TransportBindingElement rozhraní. Poté je nutné minimálně implementovat metodu Clone a vlastnost TransportBindingElement.Scheme.
Clone – Měla by vrátit čerstvou kopii tohoto prvku vazby. Jako doporučenou praxi doporučujeme, aby autoři prvků vazby implementovali klonování pomocí konstruktoru kopírování, který volá konstruktor základní kopie, a poté klonuje všechna další pole v této třídě.
Scheme – Get Scheme vlastnost vrátí schéma identifikátoru URI pro transportní protokol reprezentovaný elementem vazby. Například System.ServiceModel.Channels.HttpTransportBindingElement a System.ServiceModel.Channels.TcpTransportBindingElement vrací "http" a "net.tcp" z jejich příslušných vlastností Scheme.
Prvky vazby kódování
Pokud chcete vytvořit nové prvky vazby kódování, začněte rozšířením BindingElement třídy a implementací System.ServiceModel.Channels.MessageEncodingBindingElement třídy. Minimálně je nutné implementovat Clone, MessageEncodingBindingElement.CreateMessageEncoderFactory metody a MessageEncodingBindingElement.MessageVersion vlastnost.
Clone. Vrátí novou kopii tohoto prvku vazby. Doporučujeme, aby autoři prvků vazby implementovali Clone pomocí kopírovacího konstruktoru, který volá základní kopírovací konstruktor, a poté klonovali všechna další pole v této třídě.
CreateMessageEncoderFactory. Vrátí MessageEncoderFactory, který poskytuje přístup k skutečné třídě, jež implementuje váš nový kodér a měla by dědit z MessageEncoder. Pro více informací se podívejte na MessageEncoderFactory a MessageEncoder.
MessageVersion. Vrátí MessageVersion použitý v tomto kódování, který představuje verze protokolu SOAP a WS-Addressing, které jsou používány.
Úplný seznam volitelných metod a vlastností pro uživatelem definované prvky vazby kódování naleznete v tématu MessageEncodingBindingElement.
Další informace o vytvoření nového prvku vazby naleznete v tématu Vytváření User-Defined vazby.
Po vytvoření elementu vazby pro váš kanál se vraťte do tématu Vývoj kanálů , abyste zjistili, jestli chcete do elementu vazby přidat podporu konfiguračního souboru, jestli a jak přidat podporu publikování metadat a zda a jak vytvořit uživatelsky definovanou vazbu, která používá váš element vazby.