Dela via


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.

Kommentar

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.

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 sammansättning och använd XmlSerializerAssemblyAttribute på tjänstkontraktet XmlSerializerFormatAttributesom använder . AssemblyName Ange egenskaperna eller CodeBase så att de pekar på den kompilerade serialiseringssammansättningen.

    3. Kompilera den genererade serialiseringskoden i programsammansättningen och lägg till i XmlSerializerAssemblyAttribute tjänstkontraktet som använder XmlSerializerFormatAttribute. Ange AssemblyName inte egenskaperna 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 verktyget ServiceModel Metadata Utility (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.

    T.ex.:

    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.

Exempel

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