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 programování na úrovni kanálu služby a programování na úrovni klienta. 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

BindingElement Vytvoření kanálu 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ý může rozdělit velké zprávy do bloků dat a znovu je sestavit na druhém konci, můžete tento kanál použít v libovolné vazbě implementací BindingElement a konfigurací vazby tak, aby ji používala. Zbývající část tohoto tématu používá ChunkingChannel jako příklad k předvedení požadavků implementace elementu vazby.

A ChunkingBindingElement je zodpovědný za vytvoření a ChunkingChannelFactoryChunkingChannelListener. Přepíše a implementuje CanBuildChannelFactory a zkontroluje, zda je IDuplexSessionChannel parametr typu (v našem příkladu je to jediný obrazec kanálu podporovaný ) ChunkingChannela že ostatní prvky vazby ve vazbě podporují tento tvar CanBuildChannelListener kanálu.

BuildChannelFactory nejprve zkontroluje, jestli je možné vytvořit požadovaný obrazec kanálu, a pak získá seznam akcí zpráv, které se mají zapsat do bloku. Pak vytvoří novou ChunkingChannelFactory, předá ji vnitřní kanál továrnu. (Pokud vytváříte prvek vazby přenosu, je tento prvek posledním prvkem v zásobníku vazeb, a proto musí vytvořit naslouchací proces kanálu nebo objekt pro vytváření kanálů.)

BuildChannelListener má podobnou implementaci pro vytvoření ChunkingChannelListener a předání vnitřního kanálu naslouchací proces.

Jako další příklad při použití přenosového kanálu poskytuje ukázka 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 přidružených k kanálu.

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í a vrácení našeho schématu BindingElement (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 na webu ChannelProtectionRequirements.

Clone by měla vrátit čerstvou kopii tohoto prvku vazby. Doporučujeme, aby autoři elementů vazby implementovali Clone pomocí konstruktoru kopírování, který volá konstruktor základní kopie a potom klonuje 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í. Minimálně je nutné implementovat metodu CloneTransportBindingElement.Scheme a vlastnost.

Clone – Měla by vrátit čerstvou kopii tohoto prvku vazby. Doporučujeme, aby autoři elementů vazby implementovali klon pomocí konstruktoru kopírování, který volá konstruktor základní kopie, a pak 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 návrat "http" a "net.tcp" z příslušných Scheme vlastností.

Elementy 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í uživatelem definovaných vazeb.

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é