Not
Åtkomst till denna sida kräver auktorisation. Du kan prova att logga in eller byta katalog.
Åtkomst till denna sida kräver auktorisation. Du kan prova att byta katalog.
XmlSerializer-exemplet visar hur du serialiserar och deserialiserar typer som är kompatibla med XmlSerializer. Standardformaterare för Windows Communication Foundation (WCF) är DataContractSerializer klassen. Klassen XmlSerializer kan användas för att serialisera och deserialisera typer när DataContractSerializer klassen inte kan användas. Detta är ofta fallet när exakt kontroll över XML krävs, till exempel om en databit måste vara ett XML-attribut och inte ett XML-element. Dessutom väljs ofta XmlSerializer automatiskt när klienter skapas för icke-WCF-tjänster.
I det här exemplet är klienten ett konsolprogram (.exe) och tjänsten hanteras av Internet Information Services (IIS).
Anmärkning
Installationsproceduren och bygginstruktionerna för det här exemplet finns i slutet av det här avsnittet.
ServiceContractAttribute och XmlSerializerFormatAttribute måste tillämpas på gränssnittet enligt följande exempelkod.
[ServiceContract(Namespace="http://Microsoft.ServiceModel.Samples"), XmlSerializerFormat]
public interface IXmlSerializerCalculator
{
[OperationContract]
ComplexNumber Add(ComplexNumber n1, ComplexNumber n2);
[OperationContract]
ComplexNumber Subtract(ComplexNumber n1, ComplexNumber n2);
[OperationContract]
ComplexNumber Multiply(ComplexNumber n1, ComplexNumber n2);
[OperationContract]
ComplexNumber Divide(ComplexNumber n1, ComplexNumber n2);
}
De offentliga medlemmarna i ComplexNumber klassen serialiseras av XmlSerializer som XML-attribut. Kan DataContractSerializer inte användas för att skapa den här typen av XML-instans.
public class ComplexNumber
{
private double real;
private double imaginary;
[XmlAttribute]
public double Real
{
get { return real; }
set { real = value; }
}
[XmlAttribute]
public double Imaginary
{
get { return imaginary; }
set { imaginary = value; }
}
public ComplexNumber(double real, double imaginary)
{
this.Real = real;
this.Imaginary = imaginary;
}
public ComplexNumber()
{
this.Real = 0;
this.Imaginary = 0;
}
}
Tjänstimplementeringen beräknar och returnerar lämpligt resultat – acceptera och returnera värden av typen ComplexNumber .
public class XmlSerializerCalculatorService : IXmlSerializerCalculator
{
public ComplexNumber Add(ComplexNumber n1, ComplexNumber n2)
{
return new ComplexNumber(n1.Real + n2.Real, n1.Imaginary +
n2.Imaginary);
}
…
}
Klientimplementeringen använder också komplexa tal. Både tjänstkontraktet och datatyperna definieras i den generatedClient.cs källfilen, som genererades av ServiceModel Metadata Utility Tool (Svcutil.exe) från tjänstens metadata. Svcutil.exe kan upptäcka när ett kontrakt är icke-serialiserbart av DataContractSerializer och återgår till att avge XmlSerializable-typer i det här fallet. Om du vill framtvinga användningen av XmlSerializerkan du skicka kommandoalternativet /serializer:XmlSerializer (använd XmlSerializer) till Svcutil.exe-verktyget.
// Create a client.
XmlSerializerCalculatorClient client = new
XmlSerializerCalculatorClient();
// Call the Add service operation.
ComplexNumber value1 = new ComplexNumber();
value1.Real = 1;
value1.Imaginary = 2;
ComplexNumber value2 = new ComplexNumber();
value2.Real = 3;
value2.Imaginary = 4;
ComplexNumber result = client.Add(value1, value2);
Console.WriteLine("Add({0} + {1}i, {2} + {3}i) = {4} + {5}i",
value1.Real, value1.Imaginary, value2.Real, value2.Imaginary,
result.Real, result.Imaginary);
…
}
När du kör exemplet visas åtgärdsbegäranden och svar i klientkonsolfönstret. Tryck på RETUR i klientfönstret för att stänga av klienten.
Add(1 + 2i, 3 + 4i) = 4 + 6i
Subtract(1 + 2i, 3 + 4i) = -2 + -2i
Multiply(2 + 3i, 4 + 7i) = -13 + 26i
Divide(3 + 7i, 5 + -2i) = 0.0344827586206897 + 1.41379310344828i
Press <ENTER> to terminate client.
Så här konfigurerar du, skapar och kör exemplet
Kontrollera att du har utfört One-Time installationsproceduren för Windows Communication Foundation-exempel.
Om du vill skapa C# eller Visual Basic .NET-versionen av lösningen följer du anvisningarna i Skapa Windows Communication Foundation-exempel.
Om du vill köra exemplet i en konfiguration med en eller flera datorer följer du anvisningarna i Köra Windows Communication Foundation-exempel.