Gör så här: Förbättra starttiden för WCF-klientprogram med hjälp av XmlSerializer

Tjänster och klientprogram som använder datatyper som är serialiserbara med hjälp av XmlSerializer generera och kompilera serialiseringskod för dessa datatyper vid körning, vilket kan leda till långsamma startprestanda.

Anmärkning

Förgenererad serialiseringskod kan endast användas i klientprogram och inte i tjänster.

Verktyget servicemodelmetadata (Svcutil.exe) kan förbättra startprestanda för dessa program genom att generera nödvändig serialiseringskod från de kompilerade sammansättningarna för programmet. Svcutil.exe genererar serialiseringskod för alla datatyper som används i tjänstkontrakt i den kompilerade programsammansättningen som kan serialiseras med hjälp av XmlSerializer. Tjänst- och åtgärdskontrakt som använder XmlSerializer är markerade med XmlSerializerFormatAttribute.

Att generera XmlSerializer-serialiseringskod

  1. Kompilera din tjänst eller klientkod till en eller flera sammansättningar.

  2. Öppna en SDK-kommandotolk.

  3. I kommandotolken startar du verktyget Svcutil.exe med följande format.

    svcutil.exe /t:xmlSerializer  <assemblyPath>*
    

    Argumentet assemblyPath anger sökvägen till en sammansättning som innehåller tjänstkontraktstyper. Svcutil.exe genererar serialiseringskod för alla datatyper som används i tjänstkontrakt i den kompilerade programsammansättningen som kan serialiseras med hjälp av XmlSerializer.

    Svcutil.exe kan bara generera C#-serialiseringskod. En källkodsfil genereras för varje indatasammansättning. Du kan inte använda växeln /language för att ändra språket för den genererade koden.

    Om du vill ange sökvägen till beroende sammansättningar använder du alternativet /reference .

  4. Gör den genererade serialiseringskoden tillgänglig för ditt program med något av följande alternativ:

    1. Kompilera den genererade serialiseringskoden till en separat sammansättning med namnet [ursprunglig sammansättning].XmlSerializers.dll (till exempel MyApp.XmlSerializers.dll). Programmet måste kunna läsa in sammansättningen, som måste signeras med samma nyckel som den ursprungliga sammansättningen. Om du kompilerar om den ursprungliga sammansättningen måste du återskapa serialiseringssammansättningen.

    2. Kompilera den genererade serialiseringskoden till en separat assembly och använd XmlSerializerAssemblyAttribute på tjänstkontrakt som använder XmlSerializerFormatAttribute. Ställ in egenskaperna för AssemblyName eller CodeBase så att de pekar på den kompilerade serialiseringssamlingen.

    3. Kompilera den genererade serialiseringskoden i applikationssamlingen och lägg till XmlSerializerAssemblyAttribute i tjänstkontraktet som använder XmlSerializerFormatAttribute. Ange inte egenskaperna AssemblyName eller CodeBase. Standard serialiseringssammansättningen antas vara den aktuella sammansättningen.

Generera XmlSerializer-serialiseringskod i Visual Studio

  1. Skapa WCF-tjänst- och klientprojekten i Visual Studio. Lägg sedan till en tjänstreferens till klientprojektet.

  2. Lägg till ett XmlSerializerFormatAttribute i tjänstkontraktet i filen reference.cs i klientappprojektet under serviceReference ->reference.svcmap. Observera att du måste visa alla filer i Solution Explorer för att se dessa filer.

  3. Skapa klientappen.

  4. Använd verktygsverktyget för ServiceModel-metadata (Svcutil.exe) för att skapa en förgenererad serialiserare .cs fil med hjälp av kommandot :

    svcutil.exe /t:xmlSerializer  <assemblyPath>*
    

    Argumentet assemblyPath anger sökvägen till WCF-klientsammansättningen.

    Såsom:

    svcutil.exe /t:xmlSerializer wcfclient.exe
    

    Filen WCFClient.XmlSerializers.dll.cs genereras.

  5. Kompilera den förgenererade serialiseringssammansättningen.

    Baserat på exemplet i föregående steg skulle kompileringskommandot vara följande:

    csc /r:wcfclient.exe /out:WCFClient.XmlSerializers.dll /t:library WCFClient.XmlSerializers.dll.cs
    

    Kontrollera att den genererade WCFClient.XmlSerializers.dll finns i samma katalog som klientappen, vilket är WCFClient.exe i det här fallet.

  6. Kör klientappen som vanligt. Den förgenererade serialiseringssammansättningen används.

Example

Följande kommando genererar serialiseringstyper för XmlSerializer typer som alla tjänstkontrakt i sammansättningen använder.

svcutil /t:xmlserializer myContractLibrary.exe

Se även