Gewusst wie: Implementieren eines Windows Communication Foundation-Dienstvertrags
Dies ist die zweite von sechs Aufgaben, die zum Erstellen eines grundlegenden Windows Communication Foundation (WCF)-Diensts und eines Clients, der den Dienst aufrufen kann, erforderlich sind. Eine Übersicht über alle sechs Aufgaben finden Sie im Thema Lernprogramm "Erste Schritte".
Die Erstellung eines WCF-Diensts erfordert, dass Sie zuerst den Vertrag erstellen. Dieser wird mithilfe einer Schnittstelle definiert. Weitere Informationen über zum Erstellen der Schnittstelle finden Sie unter Gewusst wie: Definieren eines Windows Communication Foundation-Dienstvertrags. Der nächste, in diesem Beispiel gezeigte Schritt besteht darin, die Schnittstelle zu implementieren. Dies schließt die Erstellung einer CalculatorService-Klasse ein, die die benutzerdefinierte ICalculator-Schnittstelle implementiert. Der für diese Aufgabe verwendete Code wird in dem Beispiel im Anschluss an das Verfahren bereitgestellt.
So implementieren Sie einen WCF-Dienstvertrag
Erstellen Sie in der gleichen Datei, in der die
ICalculator
-Schnittstelle definiert wurde, eine neue Klasse mit dem NamenCalculatorService
. DieCalculatorService
implementiert dieICalculator
-Schnittstelle.Public Class CalculatorService Implements ICalculator
public class CalculatorService : ICalculator
Implementieren Sie jede in der
ICalculator
-Schnittstelle innerhalb derCalculatorService
-Klasse definierte Methode.Public Function Add(ByVal n1 As Double, ByVal n2 As Double) As Double Implements ICalculator.Add Dim result As Double = n1 + n2 ' Code added to write output to the console window. Console.WriteLine("Received Add({0},{1})", n1, n2) Console.WriteLine("Return: {0}", result) Return result End Function Public Function Subtract(ByVal n1 As Double, ByVal n2 As Double) As Double Implements ICalculator.Subtract Dim result As Double = n1 - n2 Console.WriteLine("Received Subtract({0},{1})", n1, n2) Console.WriteLine("Return: {0}", result) Return result End Function Public Function Multiply(ByVal n1 As Double, ByVal n2 As Double) As Double Implements ICalculator.Multiply Dim result As Double = n1 * n2 Console.WriteLine("Received Multiply({0},{1})", n1, n2) Console.WriteLine("Return: {0}", result) Return result End Function Public Function Divide(ByVal n1 As Double, ByVal n2 As Double) As Double Implements ICalculator.Divide Dim result As Double = n1 / n2 Console.WriteLine("Received Divide({0},{1})", n1, n2) Console.WriteLine("Return: {0}", result) Return result End Function
public double Add(double n1, double n2) { double result = n1 + n2; Console.WriteLine("Received Add({0},{1})", n1, n2); // Code added to write output to the console window. Console.WriteLine("Return: {0}", result); return result; } public double Subtract(double n1, double n2) { double result = n1 - n2; Console.WriteLine("Received Subtract({0},{1})", n1, n2); Console.WriteLine("Return: {0}", result); return result; } public double Multiply(double n1, double n2) { double result = n1 * n2; Console.WriteLine("Received Multiply({0},{1})", n1, n2); Console.WriteLine("Return: {0}", result); return result; } public double Divide(double n1, double n2) { double result = n1 / n2; Console.WriteLine("Received Divide({0},{1})", n1, n2); Console.WriteLine("Return: {0}", result); return result; }
Hinweis: Der Code für das Schreiben der Ausgabe wurde hinzugefügt, um das Testen zu vereinfachen.
Beispiel
Im folgenden Codebeispiel wird die Schnittstelle, die den Dienstvertrag definiert, sowie die Implementierung der Schnittstelle dargestellt.
Imports System
Imports System.ServiceModel
Namespace Microsoft.ServiceModel.Samples
' Define a service contract.
<ServiceContract([Namespace] := "http://Microsoft.ServiceModel.Samples")> _
Public Interface ICalculator
<OperationContract()> _
Function Add(ByVal n1 As Double, ByVal n2 As Double) As Double
<OperationContract()> _
Function Subtract(ByVal n1 As Double, ByVal n2 As Double) As Double
<OperationContract()> _
Function Multiply(ByVal n1 As Double, ByVal n2 As Double) As Double
<OperationContract()> _
Function Divide(ByVal n1 As Double, ByVal n2 As Double) As Double
End Interface
' Step 1: Create service class that implements the service contract.
Public Class CalculatorService
Implements ICalculator
' Step 2: Implement functionality for the service operations.
Public Function Add(ByVal n1 As Double, ByVal n2 As Double) As Double Implements ICalculator.Add
Dim result As Double = n1 + n2
' Code added to write output to the console window.
Console.WriteLine("Received Add({0},{1})", n1, n2)
Console.WriteLine("Return: {0}", result)
Return result
End Function
Public Function Subtract(ByVal n1 As Double, ByVal n2 As Double) As Double Implements ICalculator.Subtract
Dim result As Double = n1 - n2
Console.WriteLine("Received Subtract({0},{1})", n1, n2)
Console.WriteLine("Return: {0}", result)
Return result
End Function
Public Function Multiply(ByVal n1 As Double, ByVal n2 As Double) As Double Implements ICalculator.Multiply
Dim result As Double = n1 * n2
Console.WriteLine("Received Multiply({0},{1})", n1, n2)
Console.WriteLine("Return: {0}", result)
Return result
End Function
Public Function Divide(ByVal n1 As Double, ByVal n2 As Double) As Double Implements ICalculator.Divide
Dim result As Double = n1 / n2
Console.WriteLine("Received Divide({0},{1})", n1, n2)
Console.WriteLine("Return: {0}", result)
Return result
End Function
End Class
End Namespace
using System;
using System.ServiceModel;
namespace Microsoft.ServiceModel.Samples
{
// Define a service contract.
[ServiceContract(Namespace = "http://Microsoft.ServiceModel.Samples")]
public interface ICalculator
{
[OperationContract]
double Add(double n1, double n2);
[OperationContract]
double Subtract(double n1, double n2);
[OperationContract]
double Multiply(double n1, double n2);
[OperationContract]
double Divide(double n1, double n2);
}
// Step 1: Create service class that implements the service contract.
public class CalculatorService : ICalculator
{
// Step 2: Implement functionality for the service operations.
public double Add(double n1, double n2)
{
double result = n1 + n2;
Console.WriteLine("Received Add({0},{1})", n1, n2);
// Code added to write output to the console window.
Console.WriteLine("Return: {0}", result);
return result;
}
public double Subtract(double n1, double n2)
{
double result = n1 - n2;
Console.WriteLine("Received Subtract({0},{1})", n1, n2);
Console.WriteLine("Return: {0}", result);
return result;
}
public double Multiply(double n1, double n2)
{
double result = n1 * n2;
Console.WriteLine("Received Multiply({0},{1})", n1, n2);
Console.WriteLine("Return: {0}", result);
return result;
}
public double Divide(double n1, double n2)
{
double result = n1 / n2;
Console.WriteLine("Received Divide({0},{1})", n1, n2);
Console.WriteLine("Return: {0}", result);
return result;
}
}
}
Der Dienstvertrag ist nun erstellt und implementiert. Erstellen Sie die Lösung, um sicherzustellen, dass keine Kompilierungsfehler auftreten, und fahren Sie anschließend zum Ausführen des Diensts mit Gewusst wie: Hosten und Ausführen eines grundlegenden Windows Communication Foundation-Diensts fort. Informationen zur Problembehandlung finden Sie unter Problembehandlung für das Lernprogramm "Erste Schritte".
Kompilieren des Codes
Wenn Sie einen Befehlszeilencompiler verwenden, müssen Sie auf die System.ServiceModel-Assembly verweisen.
Wenn Sie Visual Studio verwenden, klicken Sie im Menü Erstellen auf Projektmappe erstellen (oder drücken Sie STRG+UMSCHALT+B).