Sdílet prostřednictvím


Vytvoření BindingElement

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.

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

Viz také