Postupy: Vylepšení doby spouštění klientských aplikací WCF pomocí třídy XmlSerializer
Služby a klientské aplikace, které používají datové typy serializovatelné pomocí XmlSerializer kódu generování a kompilace serializace pro tyto datové typy za běhu, což může vést k pomalému spuštění výkonu.
Poznámka:
Předgenerovaný kód serializace lze použít pouze v klientských aplikacích a ne ve službách.
Nástroj ServiceModel Metadata Utility (Svcutil.exe) může zlepšit výkon spouštění pro tyto aplikace generováním potřebného serializačního kódu z kompilovaných sestavení pro aplikaci. Svcutil.exe generuje kód serializace pro všechny datové typy používané v kontraktech služeb v sestavení kompilované aplikace, které lze serializovat pomocí XmlSerializer. Servisní a provozní kontrakty, které používají, XmlSerializer jsou označeny značkou XmlSerializerFormatAttribute.
Generování kódu serializace XmlSerializer
Zkompilujte službu nebo klientský kód do jednoho nebo více sestavení.
Otevřete příkazový řádek sady SDK.
Na příkazovém řádku spusťte nástroj Svcutil.exe pomocí následujícího formátu.
svcutil.exe /t:xmlSerializer <assemblyPath>*
Argument
assemblyPath
určuje cestu k sestavení, které obsahuje typy kontraktů služeb. Svcutil.exe generuje kód serializace pro všechny datové typy používané v kontraktech služeb v sestavení kompilované aplikace, které lze serializovat pomocí XmlSerializer.Svcutil.exe může generovat pouze kód serializace jazyka C#. Pro každé vstupní sestavení se vygeneruje jeden soubor zdrojového kódu. Ke změně jazyka vygenerovaného kódu nelze použít přepínač /language .
Chcete-li zadat cestu k závislým sestavením, použijte možnost /reference .
Pomocí jedné z následujících možností zpřístupněte vygenerovaný kód serializace pro vaši aplikaci:
Zkompilujte vygenerovaný serializační kód do samostatného sestavení s názvem [původní sestavení]. XmlSerializers.dll (například MyApp.XmlSerializers.dll). Aplikace musí být schopna načíst sestavení, které musí být podepsáno stejným klíčem jako původní sestavení. Pokud znovu zkompilujete původní sestavení, je nutné znovu vygenerovat sestavení serializace.
Zkompilujte vygenerovaný serializační kód do samostatného sestavení a použijte na XmlSerializerAssemblyAttribute kontraktu služby, který používá XmlSerializerFormatAttribute. AssemblyName Nastavte nebo CodeBase vlastnosti tak, aby odkazovaly na kompilované serializace sestavení.
Zkompilujte vygenerovaný serializační kód do sestavení aplikace a přidejte ho XmlSerializerAssemblyAttribute do kontraktu XmlSerializerFormatAttributeslužby, který používá . Nenastavujte AssemblyName ani CodeBase vlastnosti. Výchozí sestavení serializace se předpokládá jako aktuální sestavení.
Generování kódu serializace XmlSerializer v sadě Visual Studio
Vytvořte v sadě Visual Studio službu WCF a klientské projekty. Potom přidejte odkaz na službu do klientského projektu.
XmlSerializerFormatAttribute Přidejte do kontraktu služby v souboru reference.cs v projektu klientské aplikace v části serviceReference ->reference.svcmap. Všimněte si, že pokud chcete zobrazit tyto soubory, musíte zobrazit všechny soubory v Průzkumník řešení.
Sestavte klientskou aplikaci.
Pomocí nástroje ServiceModel Metadata Utility (Svcutil.exe) vytvořte pomocí příkazu předem vygenerovaný soubor serial .cs izátoru:
svcutil.exe /t:xmlSerializer <assemblyPath>*
Argument assemblyPath určuje cestu k sestavení klienta WCF.
Jako:
svcutil.exe /t:xmlSerializer wcfclient.exe
Vygeneruje se soubor WCFClient.XmlSerializers.dll.cs .
Zkompilujte předgenerované sestavení serializace.
Na základě příkladu v předchozím kroku by příkaz kompilace byl následující:
csc /r:wcfclient.exe /out:WCFClient.XmlSerializers.dll /t:library WCFClient.XmlSerializers.dll.cs
Ujistěte se, že vygenerovaný WCFClient.XmlSerializers.dll je ve stejném adresáři jako klientská aplikace, což je v tomto případě WCFClient.exe .
Spusťte klientskou aplikaci obvyklým způsobem. Použije se předgenerované sestavení serializace.
Příklad
Následující příkaz generuje typy serializace pro XmlSerializer
typy, které všechny kontrakty služeb v sestavení používají.
svcutil /t:xmlserializer myContractLibrary.exe