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.
Tento článek obsahuje doplňující poznámky k referenční dokumentaci pro toto rozhraní API.
Aplikujte atribut DataContractAttribute na typy (třídy, struktury nebo výčty), které jsou používány v operacích serializace a deserializace DataContractSerializer. Pokud odesíláte nebo přijímáte zprávy pomocí infrastruktury WCF (Windows Communication Foundation), měli byste také použít DataContractAttribute všechny třídy, které uchovávají data a manipulují s daty odesílaných ve zprávách. Další informace o kontraktech dat naleznete v tématu Použití kontraktů dat.
Také musíte DataMemberAttribute aplikovat na jakékoli pole, vlastnost nebo událost, které obsahují hodnoty, jež chcete serializovat. Použitím této možnosti DataContractAttributeexplicitně povolíte DataContractSerializer serializaci a deserializaci dat.
Upozornění
Na privátní pole můžete aplikovat DataMemberAttribute. Mějte na paměti, že data vrácená polem (i když jsou soukromá) serializována a deserializována, a proto mohou být zobrazena nebo zachycena škodlivým uživatelem nebo procesem.
Další informace o kontraktech dat najdete v tématech uvedených v tématu Používání kontraktů dat.
Datové smlouvy
Kontrakt dat je abstraktní popis sady polí s názvem a datovým typem pro každé pole. Smlouva o datech existuje mimo jakoukoli jednotlivou implementaci, která umožňuje službám na různých platformách spolupracovat. Pokud data předávaná mezi službami odpovídají stejnému kontraktu, můžou data zpracovávat všechny služby. Toto zpracování se také označuje jako volně propojený systém. Kontrakt dat je také podobný rozhraní v tom, že kontrakt určuje, jak musí být data doručena, aby je bylo možné zpracovat aplikací. Například kontrakt dat může specifikovat datový typ s názvem "Osoba", který má dvě textová pole nazvaná "Jméno" a "Příjmení". Chcete-li vytvořit datový kontrakt, aplikujte DataContractAttribute na třídu a aplikujte DataMemberAttribute na všechna pole nebo vlastnosti, které musí být serializovány. Při serializaci jsou data v souladu s kontraktem dat, který je implicitně integrovaný do typu.
Poznámka:
Kontrakt dat se ve svém chování dědění výrazně liší od skutečného rozhraní. Všechny odvozené typy dědí rozhraní. Pokud použijete DataContractAttribute na základní třídu, odvozené typy nezdědí ani atribut, ani chování. Nicméně, pokud odvozený typ má datový kontrakt, datové členy základní třídy jsou serializovány. Je však nutné použít DataMemberAttribute na nové členy v odvozené třídě, aby byly serializovatelné.
Dokumenty schématu XML a nástroj SvcUtil
Pokud vyměňujete data s jinými službami, je nutné popsat smlouvu o datech. Pro aktuální verzi schématu DataContractSerializerXML lze použít k definování kontraktů dat. (Pro stejný účel lze použít jiné formy metadat a popisu.) Pokud chcete vytvořit schéma XML z vaší aplikace, použijte nástroj ServiceModel Metadata Utility (Svcutil.exe) s možností příkazového řádku /dconly . Když je vstupem do nástroje sestavení, nástroj ve výchozím nastavení vygeneruje sadu schémat XML, která definují všechny typy datových kontraktů nalezené v daném sestavení. Naopak můžete použít nástroj Svcutil.exe k vytvoření definic tříd jazyka Visual Basic nebo C#, které odpovídají požadavkům schémat XML, které používají konstrukty, které mohou být vyjádřeny datovými kontrakty. V tomto případě není vyžadována možnost příkazového řádku /dconly .
Pokud vstup do nástroje Svcutil.exe je ve výchozím nastavení schématem XML, nástroj vytvoří sadu tříd. Pokud tyto třídy prozkoumáte, zjistíte, že DataContractAttribute byla použita. Tyto třídy můžete použít k vytvoření nové aplikace pro zpracování dat, která se musí vyměňovat s jinými službami.
Můžete také spustit nástroj na koncový bod, který vrací dokument WSDL (Web Services Description Language), který automaticky vygeneruje kód a konfiguraci pro vytvoření klienta WCF (Windows Communication Foundation). Vygenerovaný kód obsahuje typy, které jsou označeny znakem DataContractAttribute.
Opakované použití existujících typů
Kontrakt dat má dva základní požadavky: stabilní název a seznam členů. Stabilní název se skládá z identifikátoru URI (Uniform Resource Identifier) oboru názvů a místního názvu smlouvy. Ve výchozím nastavení, když aplikujete DataContractAttribute na třídu, používá název třídy jako místní název a obor názvů třídy (s předponou "http://schemas.datacontract.org/2004/07/") jako URI oboru názvů. Výchozí nastavení můžete přepsat nastavením Name a Namespace vlastností. Obor názvů můžete také změnit použitím ContractNamespaceAttribute k oboru názvů. Tuto funkci použijte, pokud máte existující typ, který zpracovává data přesně tak, jak potřebujete, ale má jiný obor názvů a název třídy z kontraktu dat. Přepsáním výchozích hodnot můžete znovu použít existující typ a mít serializovaná data v souladu se smlouvou o datech.
Poznámka:
V libovolném kódu můžete použít slovo DataContract místo delšího DataContractAttribute.
Verzování
Datový kontrakt může také pojmout novější verze sebe sama. To znamená, že když novější verze kontraktu obsahuje další data, tato data se uloží a vrátí se odesílateli v nezměněné podobě. Provedete to implementací IExtensibleDataObject rozhraní.
Další informace o verzování naleznete v Verzování datového kontraktu.