XMLSerializer Sample
Sampel XmlSerializer menunjukkan cara menserialisasikan dan mendeserialisasi jenis yang kompatibel dengan XmlSerializer. Formatter Windows Communication Foundation (WCF) default adalah kelas DataContractSerializer. Kelas XmlSerializer dapat digunakan untuk menserialisasikan dan mendeserialisasi jenis ketika kelas DataContractSerializer tidak dapat digunakan. Ini sering terjadi ketika kontrol yang tepat atas XML diperlukan - misalnya, jika sepotong data harus berupa atribut XML dan bukan elemen XML. Selain itu, XmlSerializer sering dipilih secara otomatis saat membuat klien untuk layanan non-WCF.
Dalam sampel ini, klien adalah aplikasi konsol (.exe) dan layanan di-hosting oleh Layanan Informasi Internet (IIS).
Catatan
Prosedur penyiapan dan petunjuk pembuatan untuk sampel ini terdapat di akhir topik ini.
ServiceContractAttribute dan XmlSerializerFormatAttribute harus diterapkan ke antarmuka seperti yang ditunjukkan dalam kode sampel berikut.
[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);
}
Anggota publik kelas ComplexNumber
diserialisasikan dengan XmlSerializer sebagai atribut XML. DataContractSerializer tidak dapat digunakan untuk membuat instans XML semacam ini.
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;
}
}
Implementasi layanan menghitung dan mengembalikan hasil yang sesuai—menerima dan mengembalikan nilai jenis ComplexNumber
.
public class XmlSerializerCalculatorService : IXmlSerializerCalculator
{
public ComplexNumber Add(ComplexNumber n1, ComplexNumber n2)
{
return new ComplexNumber(n1.Real + n2.Real, n1.Imaginary +
n2.Imaginary);
}
…
}
Implementasi klien juga menggunakan angka kompleks. Kontrak layanan dan jenis data ditentukan dalam file sumber generatedClient.cs, yang dihasilkan oleh ServiceModel Metadata Utility Tool (Svcutil.exe) dari metadata layanan. Svcutil.exe dapat mendeteksi kapan kontrak tidak dapat diserialisasikan dengan DataContractSerializer dan kembali ke jenis pemancar XmlSerializable
dalam kasus ini. Jika Anda ingin memaksa penggunaan XmlSerializer, Anda dapat meneruskan opsi perintah /serializer:XmlSerializer (gunakan XmlSerializer) ke alat 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);
…
}
Saat Anda menjalankan sampel, permintaan dan respons operasi ditampilkan di jendela konsol klien. Tekan ENTER di jendela klien untuk mematikan komputer klien.
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.
Untuk menyiapkan, membangun, dan menjalankan sampel
Pastikan Anda telah melakukan Prosedur Penyiapan Satu Kali untuk Sampel Windows Communication Foundation.
Untuk membangun solusi edisi C# atau Visual Basic .NET, ikuti petunjuknya di Membangun Sampel WCF.
Untuk menjalankan sampel dalam konfigurasi satu atau lintas komputer, ikuti instruksi pada Menjalankan Sampel WCF.