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

  1. Skompiluj kod usługi lub klienta w co najmniej jednym zestawie.

  2. Otwórz wiersz polecenia zestawu SDK.

  3. 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 .XmlSerializer

    Svcutil.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 .

  4. Udostępnij wygenerowany kod serializacji aplikacji przy użyciu jednej z następujących opcji:

    1. 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.

    2. 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.

    3. 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

  1. Utwórz usługi WCF i projekty klienckie w programie Visual Studio. Następnie dodaj odwołanie do usługi do projektu klienta.

  2. 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ń.

  3. Skompiluj aplikację kliencka.

  4. 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 .

  5. 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.

  6. 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  

Zobacz też