Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
L’exemple XmlSerializer montre comment sérialiser et désérialiser des types compatibles avec le XmlSerializer. Le formateur Windows Communication Foundation (WCF) par défaut est la DataContractSerializer classe. La XmlSerializer classe peut être utilisée pour sérialiser et désérialiser des types lorsque la DataContractSerializer classe ne peut pas être utilisée. C’est souvent le cas lorsque le contrôle précis sur le code XML est requis , par exemple, si une partie de données doit être un attribut XML et non un élément XML. En outre, l’option XmlSerializer est souvent sélectionnée automatiquement lors de la création de clients pour les services non WCF.
Dans cet exemple, le client est une application console (.exe) et le service est hébergé par les services IIS (Internet Information Services).
Remarque
La procédure d’installation et les instructions de génération de cet exemple se trouvent à la fin de cette rubrique.
ServiceContractAttribute et XmlSerializerFormatAttribute doivent être appliqués à l'interface comme indiqué dans l'exemple de code suivant.
[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);
}
Les membres publics de ComplexNumber la classe sont sérialisés en XmlSerializer tant qu’attributs XML. Il est impossible d'utiliser le DataContractSerializer pour créer ce type d'instance XML.
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;
}
}
L’implémentation du service calcule et retourne le résultat approprié , en acceptant et en retournant des valeurs du ComplexNumber type.
public class XmlSerializerCalculatorService : IXmlSerializerCalculator
{
public ComplexNumber Add(ComplexNumber n1, ComplexNumber n2)
{
return new ComplexNumber(n1.Real + n2.Real, n1.Imaginary +
n2.Imaginary);
}
…
}
L’implémentation du client utilise également des nombres complexes. Le contrat de service et les types de données sont définis dans le fichier source generatedClient.cs, qui a été généré par l’outil utilitaire de métadonnées ServiceModel (Svcutil.exe) à partir des métadonnées de service. Svcutil.exe peut détecter lorsqu’un contrat n’est pas sérialisable par DataContractSerializer et revient à émettre des types XmlSerializable dans ce cas. Si vous souhaitez forcer l'utilisation de XmlSerializer, vous pouvez passer l'option de commande /serializer:XmlSerializer (utiliser XmlSerializer) à l'outil Svcutil.exe.
// 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);
…
}
Lorsque vous exécutez l’exemple, les demandes et réponses de l’opération s’affichent dans la fenêtre de la console cliente. Appuyez sur Entrée dans la fenêtre du client pour arrêter le client.
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.
Pour configurer, générer et exécuter l’exemple
Assurez-vous d’avoir effectué la Procédure d’installation unique pour les exemples Windows Communication Foundation.
Pour générer l’édition C# ou Visual Basic .NET de la solution, conformez-vous aux instructions figurant dans Building the Windows Communication Foundation Samples.
Pour exécuter l’exemple dans une configuration à un ou plusieurs ordinateurs, conformez-vous aux instructions figurant dans la rubrique Exécution des exemples Windows Communication Foundation.