Instrukcje: Skracanie czasu uruchamiania aplikacji klienckich programu WCF za pomocą elementu XmlSerializer
Usługi i aplikacje klienckie korzystające z typów danych, które można serializować przy użyciu XmlSerializer kodu generowania i kompilowania serializacji dla tych typów danych w czasie wykonywania, co może spowodować spowolnienie wydajności uruchamiania.
Uwaga
Wstępnie wygenerowany kod serializacji może być używany tylko w aplikacjach klienckich, a nie w usługach.
Narzędzie ServiceModel Metadata Tool (Svcutil.exe) może zwiększyć wydajność uruchamiania tych aplikacji, generując niezbędny kod serializacji z skompilowanych zestawów dla aplikacji. Svcutil.exe generuje kod serializacji dla wszystkich typów danych używanych w kontraktach usług w skompilowanym zestawie aplikacji, który można serializować przy użyciu .XmlSerializer Kontrakty usług i operacji, które używają elementu XmlSerializer , są oznaczone znakiem XmlSerializerFormatAttribute.
Aby wygenerować kod serializacji XmlSerializer
Skompiluj kod usługi lub klienta w co najmniej jednym zestawie.
Otwórz wiersz polecenia zestawu SDK.
W wierszu polecenia uruchom narzędzie Svcutil.exe przy użyciu następującego formatu.
svcutil.exe /t:xmlSerializer <assemblyPath>*
Argument
assemblyPath
określa ścieżkę do zestawu zawierającego typy kontraktów usług. Svcutil.exe generuje kod serializacji dla wszystkich typów danych używanych w kontraktach usług w skompilowanym zestawie aplikacji, który można serializować przy użyciu .XmlSerializerSvcutil.exe może generować tylko kod serializacji języka C#. Jeden plik kodu źródłowego jest generowany dla każdego zestawu wejściowego. Nie można użyć przełącznika /language , aby zmienić język wygenerowanego kodu.
Aby określić ścieżkę do zestawów zależnych, użyj opcji /reference .
Udostępnij wygenerowany kod serializacji aplikacji przy użyciu jednej z następujących opcji:
Skompiluj wygenerowany kod serializacji do oddzielnego zestawu o nazwie [oryginalny zestaw]. XmlSerializers.dll (na przykład MyApp.XmlSerializers.dll). Aplikacja musi mieć możliwość załadowania zestawu, który musi być podpisany przy użyciu tego samego klucza co oryginalny zestaw. W przypadku ponownego kompilowania oryginalnego zestawu należy ponownie wygenerować zestaw serializacji.
Skompiluj wygenerowany kod serializacji do oddzielnego zestawu i użyj XmlSerializerAssemblyAttribute elementu w kontrakcie usługi, który używa klasy XmlSerializerFormatAttribute. AssemblyName Ustaw właściwości lubCodeBase, aby wskazywały skompilowany zestaw serializacji.
Skompiluj wygenerowany kod serializacji do zestawu aplikacji i dodaj element XmlSerializerAssemblyAttribute do kontraktu usługi korzystającego z elementu XmlSerializerFormatAttribute. Nie ustawiaj AssemblyName właściwości lub CodeBase . Domyślny zestaw serializacji przyjmuje się, że jest bieżącym zestawem.
Aby wygenerować kod serializacji XmlSerializer w programie Visual Studio
Utwórz usługi WCF i projekty klienckie w programie Visual Studio. Następnie dodaj odwołanie do usługi do projektu klienta.
Dodaj element XmlSerializerFormatAttribute do kontraktu usługi w pliku reference.cs w projekcie aplikacji klienckiej w obszarze serviceReference ->reference.svcmap. Pamiętaj, że aby wyświetlić te pliki, należy wyświetlić wszystkie pliki w Eksplorator rozwiązań.
Skompiluj aplikację kliencka.
Użyj narzędzia ServiceModel Metadata Tool (Svcutil.exe), aby utworzyć wstępnie wygenerowany plik serializatora .cs za pomocą polecenia :
svcutil.exe /t:xmlSerializer <assemblyPath>*
Argument assemblyPath określa ścieżkę do zestawu klienta WCF.
Taki jak:
svcutil.exe /t:xmlSerializer wcfclient.exe
Zostanie wygenerowany plik WCFClient.XmlSerializers.dll.cs .
Skompiluj wstępnie wygenerowany zestaw serializacji.
Na podstawie przykładu w poprzednim kroku polecenie kompilowania będzie następujące:
csc /r:wcfclient.exe /out:WCFClient.XmlSerializers.dll /t:library WCFClient.XmlSerializers.dll.cs
Upewnij się, że wygenerowany WCFClient.XmlSerializers.dll znajduje się w tym samym katalogu co aplikacja kliencka, który jest WCFClient.exe w tym przypadku.
Uruchom aplikację kliencka jak zwykle. Zostanie użyty wstępnie wygenerowany zestaw serializacji.
Przykład
Następujące polecenie generuje typy serializacji dla XmlSerializer
typów, które są używane przez wszystkie kontrakty usług w zestawie.
svcutil /t:xmlserializer myContractLibrary.exe