Jegyzet
Az oldalhoz való hozzáférés engedélyezést igényel. Próbálhatod be jelentkezni vagy könyvtárat váltani.
Az oldalhoz való hozzáférés engedélyezést igényel. Megpróbálhatod a könyvtár váltását.
Az XmlSerializer-minta bemutatja, hogyan szerializálhatók és deszerializálhatók azok a típusok, amelyek kompatibilisek a XmlSerializer. A Windows Communication Foundation (WCF) alapértelmezett formátuma az DataContractSerializer osztály. Az XmlSerializer osztály használható típusok szerializálására és deszerializálására, ha az DataContractSerializer osztály nem használható. Ez gyakran akkor fordul elő, ha pontos vezérlésre van szükség az XML felett – például ha egy adatnak XML-attribútumnak kell lennie, és nem XML-elemnek. Emellett a rendszer automatikusan kiválasztja a XmlSerializer nem WCF-szolgáltatásokhoz tartozó ügyfelek létrehozásakor.
Ebben a mintában az ügyfél egy konzolalkalmazás (.exe), és a szolgáltatást az Internet Information Services (IIS) üzemelteti.
Megjegyzés:
A minta telepítési eljárása és összeállítási utasításai a témakör végén találhatók.
Az ServiceContractAttribute és a XmlSerializerFormatAttribute elemeket az alábbi mintakódban látható módon kell alkalmazni az illesztőre.
[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);
}
Az osztály nyilvános tagjai ComplexNumber által XML-attribútumokként vannak szerializálva. Ez DataContractSerializer nem használható ilyen TÍPUSÚ XML-példány létrehozásához.
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;
}
}
A szolgáltatás implementációja kiszámítja és visszaadja a megfelelő eredményt, képes elfogadni és visszaadni a ComplexNumber típusú értékeket.
public class XmlSerializerCalculatorService : IXmlSerializerCalculator
{
public ComplexNumber Add(ComplexNumber n1, ComplexNumber n2)
{
return new ComplexNumber(n1.Real + n2.Real, n1.Imaginary +
n2.Imaginary);
}
…
}
Az ügyfél implementációja összetett számokat is használ. A szolgáltatási szerződés és az adattípusok is a generatedClient.cs forrásfájlban vannak definiálva, amelyet a ServiceModel Metadata segédprogram (Svcutil.exe) hozott létre a szolgáltatás metaadataiból. Svcutil.exe észleli, ha a szerződés nem szerializálható, és ilyenkor visszaáll a DataContractSerializer típus kibocsátására. Ha kényszeríteni szeretné a XmlSerializer használatát, a /serializer:XmlSerializer (XmlSerializer használata) parancsot átadhatja a Svcutil.exe eszköznek.
// 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);
…
}
A minta futtatásakor a műveleti kérelmek és a válaszok megjelennek az ügyfélkonzol ablakában. Nyomja le az ENTER billentyűt az ügyfélablakban az ügyfél leállításához.
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.
A példa beállítása, elkészítése és futtatása
Győződjön meg arról, hogy elvégezte a Windows Communication Foundation-minták One-Time beállítási eljárását.
A megoldás C# vagy Visual Basic .NET kiadásának létrehozásához kövesse Windows Communication Foundation-mintákcímű témakör utasításait.
Ha a mintát egy vagy több gép közötti konfigurációban szeretné futtatni, kövesse A Windows Communication Foundation-minták futtatásacímű témakör utasításait.