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.
Existuje několik způsobů, jak vytvořit vazby, které systém neposkytuje:
Vytvořte vlastní vazbu založenou na třídě CustomBinding, což je kontejner, který vyplníte prvky vazby. Vlastní vazba se pak přidá do koncového bodu služby. Vlastní vazbu můžete vytvořit buď prostřednictvím kódu programu, nebo v konfiguračním souboru aplikace. Chcete-li použít element vazby z konfiguračního souboru aplikace, musí element vazby rozšířit BindingElementExtensionElement. Další informace o vlastních vazbách naleznete v tématu Vlastní vazby a CustomBinding.
Můžete vytvořit třídu, která je odvozena ze standardní vazby. Můžete například odvodit třídu z WSHttpBinding a přepsat metodu CreateBindingElements pro získání prvků vazby a vložení vlastního prvku vazby, nebo nastavit konkrétní hodnotu pro zabezpečení.
Můžete vytvořit nový Binding typ, který zcela řídí celou implementaci vazby.
Pořadí vazeb prvků
Každý prvek vazby představuje krok zpracování při odesílání nebo přijímání zpráv. Za běhu vytvářejí prvky vazby kanály a posluchače potřebné k sestavení zásobníků pro odchozí a příchozí kanály.
Existují tři hlavní typy prvků vazby: Prvky vazby protokolu, Prvky vazby kódování a Prvky vazby přepravy.
Elementy vazby protokolu – tyto prvky představují kroky zpracování na vyšší úrovni, které fungují na zprávách. Kanály a naslouchací procesy vytvořené těmito prvky vazby mohou přidávat, odebírat nebo upravovat obsah zprávy. Daná vazba může mít libovolný počet elementů vazby protokolu, z nichž každý dědí z BindingElement. Windows Communication Foundation (WCF) obsahuje několik prvků vazby protokolu, včetně ReliableSessionBindingElement a SymmetricSecurityBindingElement.
Element pro vazbu kódování – tyto prvky představují transformace mezi zprávou a kódováním připraveným k přenosu prostřednictvím sítě. Typické vazby WCF zahrnují přesně jeden element vazby kódování. Mezi příklady kódování vazeb patří MtomMessageEncodingBindingElement, BinaryMessageEncodingBindingElementa TextMessageEncodingBindingElement. Pokud pro vazbu není zadán element vazby kódování, použije se výchozí kódování. Výchozí hodnota je text, pokud je přenos HTTP a binární jinak.
Transport Binding Element – tyto prvky představují přenos zprávy kódování v přenosovém protokolu. Typické vazby WCF zahrnují přesně jeden prvek vazby přenosu, který dědí z TransportBindingElement. Mezi příklady transportních vazeb patří TcpTransportBindingElement, HttpTransportBindingElement a NamedPipeTransportBindingElement.
Při vytváření nových vazeb je důležité pořadí přidaných prvků vazby. Vždy přidejte prvky vazby v následujícím pořadí:
| Vrstva | Možnosti | Povinné |
|---|---|---|
| Tok transakcí | System.ServiceModel.Channels.TransactionFlowBindingElement | Ne |
| Spolehlivost | System.ServiceModel.Channels.ReliableSessionBindingElement | Ne |
| Zabezpečení | System.ServiceModel.Channels.SecurityBindingElement | Ne |
| Kombinovaný duplex | System.ServiceModel.Channels.CompositeDuplexBindingElement | Ne |
| Encoding | Text, Binární, MTOM, Vlastní | Ano* |
| Přeprava | TCP, Pojmenované kanály, HTTP, HTTPS, MSMQ, Vlastní | Ano |
*Protože je pro každou vazbu vyžadováno kódování, pokud není specifikováno, WCF za vás přidá výchozí kódování. Výchozí hodnota je Text/XML pro přenosy HTTP a HTTPS a binární jinak.
Vytvoření nového elementu vazby
Kromě typů odvozených z BindingElement toho, které poskytuje WCF, můžete vytvořit vlastní vazbové prvky. To vám umožní přizpůsobit způsob, jakým je vytvořen zásobník vazeb a součástí v něm, tím, že vytvoříte vlastní BindingElement, který lze v zásobníku kombinovat s ostatními typy poskytovanými systémem.
Pokud například implementujete LoggingBindingElement, který umožňuje protokolovat zprávu do databáze, musíte jej umístit nad přenosový kanál v zásobníku kanálů. V tomto případě aplikace vytvoří vlastní spojení, které je složeno z LoggingBindingElement a TcpTransportBindingElement, jak ukazuje následující příklad.
Binding customBinding = new CustomBinding(
new LoggingBindingElement(),
new TcpTransportBindingElement()
);
Způsob psaní nového elementu vazby závisí na jeho přesné funkčnosti. Jeden z ukázkových příkladů Transport: UDP poskytuje podrobný popis, jak implementovat jeden typ vazebního prvku.
Vytvoření nové vazby
Element vazby vytvořený uživatelem lze použít dvěma způsoby. Předchozí část ukazuje první způsob: prostřednictvím uživatelsky definované vazby. Vlastní vazba umožňuje uživateli vytvořit vlastní vazbu na základě libovolné sady vazeb prvků, včetně prvků vytvořených uživatelem.
Pokud používáte vazbu ve více než jedné aplikaci, vytvořte vlastní vazbu a rozšiřte Binding. Tím se zabrání ručnímu vytvoření vlastní vazby pokaždé, když ji chcete použít. Uživatelsky definovaná vazba umožňuje definovat chování vazby a zahrnout prvky vazby definované uživatelem. A je předem zabalený: při každém použití není nutné znovu sestavit vazbu.
Minimálně uživatelsky definovaná vazba musí implementovat metodu CreateBindingElements a vlastnost Scheme.
Metoda CreateBindingElements vrátí nový BindingElementCollection, který obsahuje prvky pro vazbu. Kolekce je seřazena a měla by obsahovat nejprve elementy vazby protokolu, následované elementy vazby kódování, následované elementy vazby přenosu. Pokud používáte elementy vazby poskytované systémem WCF, musíte postupovat podle pravidel řazení elementů vazby zadaných ve vlastních vazbách. Tato kolekce by nikdy neměla odkazovat na objekty odkazované v rámci uživatelem definované třídy vazby; v důsledku toho musí autoři vazby vracet Clone() při BindingElementCollection každém volání CreateBindingElements.
Vlastnost Scheme představuje schéma identifikátoru URI pro transportní protokol, který se používá u vazby. Například WSHttpBinding a NetTcpBinding vrací z příslušných Scheme vlastností "http" a "net.tcp".
Úplný seznam volitelných metod a vlastností pro uživatelsky definované vazby naleznete v tématu Binding.
Příklad
Tento příklad implementuje vazbu profilu v SampleProfileUdpBinding, která vychází z Binding. Obsahuje SampleProfileUdpBinding až čtyři prvky vazby: jeden vytvořený uživatelem UdpTransportBindingElement; a tři poskytnuté systémem: TextMessageEncodingBindingElement, CompositeDuplexBindingElement a ReliableSessionBindingElement.
public override BindingElementCollection CreateBindingElements()
{
BindingElementCollection bindingElements = new BindingElementCollection();
if (ReliableSessionEnabled)
{
bindingElements.Add(session);
bindingElements.Add(compositeDuplex);
}
bindingElements.Add(encoding);
bindingElements.Add(transport);
return bindingElements.Clone();
}
Omezení zabezpečení týkající se duplexních smluv
Ne všechny prvky vazby jsou vzájemně kompatibilní. Zejména existují určitá omezení prvků vazby zabezpečení při použití s duplexními smlouvami.
One-Shot zabezpečení
Můžete implementovat "jednorázové" zabezpečení, kde se všechny nezbytné přihlašovací údaje zabezpečení posílají v jedné zprávě nastavením negotiateServiceCredential atributu <elementu konfigurace zprávy> na false.
Jednorázové ověřování nefunguje s duplexními smlouvami.
U Request-Reply kontraktů funguje jednorázové ověřování pouze v případě, že zásobník vazeb pod elementem vazby zabezpečení podporuje vytváření IRequestChannel nebo IRequestSessionChannel instance.
U jednosměrných kontraktů funguje jednorázové ověřování, pokud zásobník vazeb pod elementem vazby zabezpečení podporuje vytváření IRequestChannel, IRequestSessionChannel, IOutputChannel nebo IOutputSessionChannel instancí.
Tokeny kontextu zabezpečení v režimu souborů cookie
Tokeny kontextu bezpečnosti módu souborů cookie nelze použít s duplexními kontrakty.
U Request-Reply kontraktů fungují tokeny kontextu zabezpečení v režimu souborů cookie pouze v případě, že zásobník vazeb pod elementem vazby zabezpečení podporuje vytváření IRequestChannel nebo IRequestSessionChannel instance.
U jednosměrných kontraktů fungují tokeny kontextu zabezpečení v režimu ukládání cookies, pokud zásobník vazeb pod prvkem zabezpečovací vazby podporuje vytváření IRequestChannel nebo IRequestSessionChannel instancí.
Tokeny zabezpečení v kontextu režimu relace
Režim relace SCT funguje pro duplexní kontrakty, pokud zásobník vazby pod prvkem zabezpečující vazby podporuje vytváření instancí IDuplexChannel nebo IDuplexSessionChannel.
Režim relace SCT funguje pro Request-Reply kontrakty, pokud sada vazeb pod elementem vazby zabezpečení podporuje vytváření IDuplexChannel, IDuplexSessionChannel, IRequestChannel nebo IRequestSessionChannel instancí.
Režim relace SCT funguje pro jednocestné kontrakty, pokud sada vazeb pod prvkem zabezpečení vazby podporuje vytváření IDuplexChannel, IDuplexSessionChannel, IRequestChannel nebo IRequestSessionChannel instancí.
Odvození ze standardní vazby
Místo vytvoření zcela nové třídy vazby může být možné rozšířit jednu ze stávajících systémových vazeb. Podobně jako v předchozím případě musíte přepsat metodu CreateBindingElements a vlastnost Scheme.