Gewusst wie: Definieren eines Windows Communication Foundation-Dienstvertrags
Dies ist die erste 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".
Beim Erstellen eines grundlegenden WCF-Diensts besteht die erste Aufgabe im Definieren eines Vertrags. Der Vertrag gibt an, welche Vorgänge der Dienst unterstützt. Ein Vorgang ähnelt einer Webdienstmethode. Verträge werden durch Definieren einer C++-, einer C#- oder einer Visual Basic (VB)-Schnittstelle erstellt. Jede Methode in der Schnittstelle entspricht einem bestimmten Dienstvorgang. Auf jede Schnittstelle muss das ServiceContractAttribute angewendet werden, und auf jeden Vorgang muss das OperationContractAttribute angewendet werden. Besitzt eine Methode innerhalb einer Schnittstelle, die über das ServiceContractAttribute verfügt, nicht das OperationContractAttribute, wird diese Methode nicht verfügbar gemacht.
Der für diese Aufgabe verwendete Code wird in dem Beispiel im Anschluss an das Verfahren bereitgestellt.
So erstellen Sie einen Windows Communication Foundation-Vertrag mit einer Schnittstelle
Öffnen Sie Visual Studio 2010 als Administrator, indem Sie im Menü Start mit der rechten Maustaste auf das Programm klicken und Als Administrator ausführen auswählen.
Erstellen Sie ein neues Konsolenanwendungsprojekt. Klicken Sie im Menü Datei auf Neu, und wählen Sie anschließend Projekt aus. Wählen Sie im Dialogfeld Neues Projekt die Option Visual Basic oder Visual C#, wählen Sie die Vorlage Konsolenanwendung, und nennen Sie das Projekt
Service
. Verwenden Sie den vorgeschlagenen Speicherort.Für ein C#-Projekt erstellt Visual Studio eine Datei mit dem Namen Program.cs. Diese Klasse enthält eine leere Methode namens Main(). Für ein VB-Projekt erstellt Visual Studio eine Datei mit dem Namen Module1.vb mit einer leeren Unterroutine namens Main(). Diese Methoden sind erforderlich, damit ein Konsolenanwendungsprojekt ordnungsgemäß erstellt wird. Deshalb sollten sie im Projekt belassen werden.
Ändern Sie den Standardnamespace
Service
inMicrosoft.ServiceModel.Samples
. Klicken Sie dazu im Projektmappen-Explorer mit der rechten Maustaste auf das Projekt, und wählen Sie Eigenschaften. Stellen Sie sicher, dass die Registerkarte Anwendung auf der linken Seite des Dialogfelds Eigenschaften ausgewählt ist. Geben Sie für ein C#-Projekt im Eingabefeld mit der Bezeichnung StandardnamespaceMicrosoft.ServiceModel.Samples
ein. Geben Sie für ein VB-Projekt im Eingabefeld mit der Bezeichnung StammnamespaceMicrosoft.ServiceModel.Samples
ein. Klicken Sie auf das Menü Datei, und wählen Sie Alle speichern aus, um die Änderungen zu speichern.Wenn Sie C# verwenden, ändern Sie den Namespace in der generierten Datei Program.cs in
Microsoft.ServiceModel.Samples
, wie im folgenden Beispiel gezeigt.namespace Microsoft.ServiceModel.Samples { class Program { static void Main(string[] args) { } } }
Wenn Sie VB verwenden, fügen Sie dem generierten Module1.vb eine Namespace-Anweisung und eine End-Namespace-Anweisung hinzu, wie im folgenden Beispiel gezeigt.
Namespace Microsoft.ServiceModel.Samples Module Module1 Sub Main() End Sub End Module End Namespace
Fügen Sie dem Projekt einen Verweis auf System.ServiceModel.dll hinzu:
Klicken Sie im Projektmappen-Explorer unter dem Projektordner mit der rechten Maustaste auf den Ordner Verweise, und wählen Sie dann Verweis hinzufügen.
Klicken Sie im Dialogfeld Verweis hinzufügen auf die Registerkarte .NET, und führen Sie einen Bildlauf nach unten durch, bis System.ServiceModel (Version 4.0.0.0) angezeigt wird. Wählen Sie diese Komponente aus, und klicken Sie auf OK.
Hinweis: Wenn Sie einen Befehlszeilencompiler verwenden (beispielsweise "Csc.exe" oder "Vbc.exe"), müssen Sie auch den Pfad zu den Assemblys angeben. Standardmäßig lautet auf einem Computer, auf dem Windows Vista ausgeführt wird, der Pfad wie folgt: "Windows\Microsoft.NET\Framework\v4.0". Fügen Sie eine using-Anweisung (Imports in Visual Basic) für den System.ServiceModel-Namespace hinzu.
Imports System.ServiceModel
using System.ServiceModel;
Definieren Sie eine neue Schnittstelle mit der Bezeichnung
ICalculator
, und wenden Sie das ServiceContractAttribute-Attribut unter Angabe des Namespace-Werts "http://Microsoft.ServiceModel.Samples" auf die Schnittstelle an. Die explizite Angabe des Namespace ist eine empfohlene Vorgehensweise, da so verhindert wird, dass der standardmäßige Namespacewert dem Vertragsnamen hinzugefügt wird.Hinweis: Wird eine Schnittstelle oder Klasse mithilfe von Attributen mit Anmerkungen versehen, können Sie im Namen des Attributs auf das "Attribute" verzichten. Deshalb wird ServiceContractAttribute in C# zu [ServiceContract] oder in Visual Basic zu <ServiceContract>. <ServiceContract(Namespace:="http://Microsoft.ServiceModel.Samples")> _ Public Interface ICalculator
[ServiceContract(Namespace = "http://Microsoft.ServiceModel.Samples")] public interface ICalculator
Deklarieren Sie für jeden Vorgang, der durch den
ICalculator
-Vertrag innerhalb der Schnittstelle verfügbar gemacht wird (Addieren, Subtrahieren, Multiplizieren und Dividieren), eine Methode, und wenden Sie das OperationContractAttribute-Attribut auf jede Methode an, die als Teil des öffentlichen WCF-Vertrags verfügbar gemacht werden soll.<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
[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);
Beispiel
Im folgenden Codebeispiel wird eine grundlegende Schnittstelle dargestellt, die einen Dienstvertrag definiert.
Imports System
' Step 5: Add the Imports statement for the System.ServiceModel namespace
Imports System.ServiceModel
Namespace Microsoft.ServiceModel.Samples
' Step 6: 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
End Namespace
using System;
// Step 5: Add the using statement for the System.ServiceModel namespace
using System.ServiceModel;
namespace Microsoft.ServiceModel.Samples
{
// Step 6: Define a service contract.
[ServiceContract(Namespace = "http://Microsoft.ServiceModel.Samples")]
public interface ICalculator
{
// Step7: Create the method declaration for the contract.
[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);
}
}
Nachdem die Schnittstelle erstellt wurde, fahren Sie zum Implementieren der Schnittstelle mit Gewusst wie: Implementieren eines Windows Communication Foundation-Dienstvertrags fort. Informationen zur Problembehandlung finden Sie unter Problembehandlung für das Lernprogramm "Erste Schritte".
Siehe auch
Aufgaben
Gewusst wie: Implementieren eines Windows Communication Foundation-Dienstvertrags
Beispiel 'Erste Schritte'
Selbst gehostete Dienste