Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Im XmlSerializer-Beispiel wird veranschaulicht, wie Typen serialisiert und deserialisiert werden, die mit der XmlSerializerDatei kompatibel sind. Der Standardmäßige Windows Communication Foundation (WCF)-Formatierer ist die DataContractSerializer Klasse. Die XmlSerializer Klasse kann zum Serialisieren und Deserialisieren von Typen verwendet werden, wenn die DataContractSerializer Klasse nicht verwendet werden kann. Dies ist häufig der Fall, wenn eine genaue Kontrolle über den XML-Code erforderlich ist , z. B. wenn ein Datenelement ein XML-Attribut und kein XML-Element sein muss. Außerdem wird die XmlSerializer Häufig beim Erstellen von Clients für Nicht-WCF-Dienste automatisch ausgewählt.
In diesem Beispiel ist der Client eine Konsolenanwendung (.exe), und der Dienst wird von IIS (Internet Information Services, Internetinformationsdienste) gehostet.
Hinweis
Die Einrichtungsverfahren und Build-Anweisungen für dieses Beispiel befinden sich am Ende dieses Themas.
ServiceContractAttribute und XmlSerializerFormatAttribute müssen auf die Schnittstelle angewendet werden, wie im folgenden Beispielcode gezeigt.
[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);
}
Die öffentlichen Member der ComplexNumber Klasse werden von XmlSerializer als XML-Attribute serialisiert. Die DataContractSerializer kann nicht verwendet werden, um diese Art von XML-Instanz zu erstellen.
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;
}
}
Die Dienstimplementierung berechnet und gibt das entsprechende Ergebnis zurück – akzeptiert und gibt Werte des ComplexNumber Typs zurück.
public class XmlSerializerCalculatorService : IXmlSerializerCalculator
{
public ComplexNumber Add(ComplexNumber n1, ComplexNumber n2)
{
return new ComplexNumber(n1.Real + n2.Real, n1.Imaginary +
n2.Imaginary);
}
…
}
Die Clientimplementierung verwendet auch komplexe Zahlen. Sowohl der Dienstvertrag als auch die Datentypen werden in der generatedClient.cs Quelldatei definiert, die vom ServiceModel Metadata Utility Tool (Svcutil.exe) aus Dienstmetadaten generiert wurde. Svcutil.exe kann erkennen, wenn ein Vertrag nicht mit dem DataContractSerializer serialisierbar ist, und gibt in diesem Fall XmlSerializable-Typen aus. Wenn Sie die Verwendung der XmlSerializerDatei erzwingen möchten, können Sie die Befehlsoption "/serializer:XmlSerializer" (XmlSerializer verwenden) an das Svcutil.exe Tool übergeben.
// 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);
…
}
Wenn Sie das Beispiel ausführen, werden die Vorgangsanforderungen und -antworten im Clientkonsolenfenster angezeigt. Drücken Sie im Clientfenster die EINGABETASTE, um den Client zu schließen.
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.
So können Sie das Beispiel einrichten, erstellen und ausführen
Stellen Sie sicher, dass Sie das One-Time Setup-Verfahren für die Windows Communication Foundation-Beispieleausgeführt haben.
Um die C#- oder Visual Basic .NET-Edition der Lösung zu erstellen, befolgen Sie die Anweisungen in Building the Windows Communication Foundation Samples.
Wenn Sie das Beispiel in einer Konfiguration mit einem Computer oder über Computer hinweg ausführen möchten, folgen Sie den Anweisungen unter Durchführen der Windows Communication Foundation-Beispiele.