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.
Visual Studio bietet Tools für die Arbeit mit Windows Communication Foundation (WCF) und WCF Data Services, Microsoft-Technologien zum Erstellen verteilter Anwendungen. Dieser Artikel enthält eine Einführung in Dienste aus Visual Studio-Perspektive. Die vollständige Dokumentation finden Sie unter WCF Data Services 4.5.
Windows Communication Foundation (WCF) ist ein einheitliches Framework zum Erstellen sicherer, zuverlässiger, transaktionsgebundener und interoperabler verteilter Anwendungen. Es ersetzt ältere Interprocess-Kommunikationstechnologien wie ASMX-Webdienste, .NET Remoting, Enterprise Services (Distributed Component Object Model (DCOM)) und Microsoft Message Queue (MSMQ). WCF vereint die Funktionalität all dieser Technologien unter einem einheitlichen Programmiermodell. Dieser Ansatz vereinfacht die Erfahrung beim Entwickeln verteilter Anwendungen.
WCF Data Services
WCF Data Services ist eine Implementierung des Open Data (Open Data Protocol (OData)-Protokollstandards. Mit WCF Data Services können Sie tabellarische Daten als eine Reihe von REST-APIs verfügbar machen, mit denen Sie Daten mithilfe standardmäßigen HTTP-Befehle wie GET, POST, PUT und DELETE zurückgeben können. Auf der Serverseite ersetzt ASP.NET Web-API WCF Data Services zum Erstellen neuer OData-Dienste. Die WCF Data Services-Clientbibliothek ist weiterhin eine gute Wahl für die Verwendung von OData-Diensten in einer .NET-Anwendung aus Visual Studio (Project>Add Service Reference). Weitere Informationen finden Sie unter WCF Data Services 4.5.
WCF-Programmiermodell
Das WCF-Programmiermodell basiert auf der Kommunikation zwischen zwei Entitäten: einem WCF-Dienst und einem WCF-Client. Das Programmiermodell wird im System.ServiceModel Namespace in .NET gekapselt.
WCF-Dienst
Ein WCF-Dienst basiert auf einer Schnittstelle, die einen Vertrag zwischen dem Dienst und dem Client definiert. Der Dienst ist mit einem ServiceContractAttribute Attribut gekennzeichnet, wie im folgenden Code dargestellt:
Sie definieren Funktionen oder Methoden, die von einem WCF-Dienst verfügbar gemacht werden, indem Sie sie mit einem OperationContractAttribute Attribut markieren.
Sie können serialisierte Daten auch verfügbar machen, indem Sie einen zusammengesetzten Typ mit einem DataContractAttribute Attribut markieren, wodurch die Datenbindung in einem Client ermöglicht wird.
Nachdem eine Schnittstelle und ihre Methoden definiert wurden, werden sie in einer Klasse gekapselt, die die Schnittstelle implementiert. Eine einzelne WCF-Dienstklasse kann mehrere Dienstverträge implementieren.
Ein WCF-Dienst wird für den Verbrauch über den sogenannten Endpunkt verfügbar gemacht. Der Endpunkt bietet die einzige Möglichkeit, mit dem Dienst zu kommunizieren. Sie können nicht auf den Dienst über einen direkten Verweis zugreifen, wie Sie es normalerweise bei anderen Klassen tun.
Ein Endpunkt besteht aus einer Adresse, einer Bindung und einem Vertrag. Die Adresse definiert, wo sich der Dienst befindet, z. B. eine URL, eine FTP-Adresse (File Transfer Protocol) oder ein Netzwerk oder einen lokalen Pfad. Eine Bindung definiert die Kommunikation mit dem Dienst. WCF-Bindungen bieten ein vielseitiges Modell zum Angeben eines Protokolls wie HTTP oder FTP mit einem Sicherheitsmechanismus wie Windows-Authentifizierung oder Benutzernamen und Kennwörtern. Ein Vertrag umfasst die Operationen, die von der WCF-Serviceklasse angeboten werden.
Mehrere Endpunkte können für einen einzelnen WCF-Dienst verfügbar gemacht werden. Dieser Ansatz ermöglicht es verschiedenen Clients, auf unterschiedliche Weise mit demselben Dienst zu kommunizieren. Beispielsweise kann ein Bankdienst einen Endpunkt für Mitarbeiter und einen anderen für externe Kunden bereitstellen, wobei jede eine andere Adresse, Bindung oder Vertrag verwendet.
WCF-Client
Ein WCF-Client besteht aus einem Proxy , der es einer Anwendung ermöglicht, mit einem WCF-Dienst zu kommunizieren, und einem Endpunkt, der einem für den Dienst definierten Endpunkt entspricht. Der Proxy wird auf der Clientseite in der dateiapp.config generiert und enthält Informationen zu den Typen und Methoden, die vom Dienst verfügbar gemacht werden. Für Dienste, die mehrere Endpunkte verfügbar machen, kann der Client das für seine Anforderungen am besten geeignete auswählen, um beispielsweise über HTTP zu kommunizieren und die Windows-Authentifizierung zu verwenden.
Nachdem ein WCF-Client erstellt wurde, verweisen Sie genauso wie jedes andere Objekt auf den Dienst in Ihrem Code. Um beispielsweise die GetData zuvor gezeigte Methode aufzurufen, schreiben Sie Code, der dem folgenden Beispiel ähnelt:
private void button1_Click(System.Object sender, System.EventArgs e)
{
ServiceReference1.Service1Client client = new
ServiceReference1.Service1Client();
string returnString;
returnString = client.GetData(textBox1.Text);
label1.Text = returnString;
}
WCF-Tools in Visual Studio
Visual Studio bietet Tools zum Erstellen von WCF-Diensten und WCF-Clients. Weitere Informationen finden Sie unter Walkthrough: Creating a simple WCF service in Windows Forms.
Erstellen und Testen von WCF-Diensten
Sie können die WCF Visual Studio-Vorlagen als Grundlage verwenden, um schnell Ihren eigenen Dienst zu erstellen. Anschließend können Sie den WCF-Dienst autohost und WCF Test Client verwenden, um den Dienst zu debuggen und zu testen. Diese Tools bieten einen schnellen und bequemen Debug- und Testzyklus und beseitigen die Anforderung, ein Hostingmodell frühzeitig zu übernehmen.
WCF-Vorlagen
WCF Visual Studio-Vorlagen stellen eine grundlegende Klassenstruktur für die Dienstentwicklung bereit. Im Dialogfeld " Neues Projekt hinzufügen " sind mehrere WCF-Vorlagen verfügbar, einschließlich WCF-Dienstbibliotheksprojekten, WCF-Dienstwebsites und WCF-Dienstelementvorlagen.
Wenn Sie eine Vorlage auswählen, werden Dateien für einen Dienstvertrag, eine Dienstimplementierung und eine Dienstkonfiguration hinzugefügt. Alle erforderlichen Attribute werden bereits hinzugefügt, erstellen einen einfachen Diensttyp "Hello World", und Sie mussten keinen Code schreiben. Sie können Code hinzufügen, um Funktionen und Methoden für Ihren echten Dienst bereitzustellen, aber die Vorlagen bieten die grundlegende Grundlage.
Weitere Informationen finden Sie unter WCF Visual Studio-Vorlagen.
WCF-Diensthost
Wenn Sie den Visual Studio-Debugger (durch Auswählen von F5) für ein WCF-Dienstprojekt starten, wird das WCF-Diensthosttool automatisch gestartet, um den Dienst lokal zu hosten. Das Tool listet die Dienste in einem WCF-Dienstprojekt auf, lädt die Konfiguration des Projekts und instanziiert einen Host für jeden gefundenen Dienst.
Das Tool hilft Ihnen beim Testen eines WCF-Diensts, ohne zusätzlichen Code zu schreiben oder während der Entwicklung einen bestimmten Host zu übernehmen. Weitere Informationen finden Sie unter WCF-Diensthost (WcfSvcHost.exe).
WCF-Testclient
Mit dem WCF Test Client-Tool können Sie Testparameter eingeben, die Eingabe an einen WCF-Dienst übermitteln und die Antwort des Diensts anzeigen. Das Tool bietet eine bequeme Diensttestumgebung, wenn Sie es mit WCF-Diensthost kombinieren. Der Speicherort des Tools ist Common7\IDE unter dem Visual Studio-Installationsordner.
Wenn Sie F5 zum Debuggen eines WCF-Dienstprojekts auswählen, wird der WCF-Testclient geöffnet und zeigt eine Liste der in der Konfigurationsdatei definierten Dienstendpunkte an. Sie können die Parameter testen und den Dienst starten und diesen Prozess wiederholen, um Ihren Dienst kontinuierlich zu testen und zu überprüfen. Weitere Informationen finden Sie unter WCF Test Client (WcfTestClient.exe).
Zugreifen auf WCF-Dienste in Visual Studio
Visual Studio vereinfacht die Erstellung von WCF-Clients durch automatisches Generieren eines Proxys und Endpunkts für Dienste, die Sie im Dialogfeld " Dienstreferenz hinzufügen " hinzufügen. Alle erforderlichen Konfigurationsinformationen werden der dateiapp.config hinzugefügt. Meistens müssen Sie nur den Dienst instanziieren, um ihn zu verwenden.
Im Dialogfeld " Dienstreferenz hinzufügen " geben Sie die Adresse für einen Dienst an, oder suchen Sie nach einem in Ihrer Lösung definierten Dienst. Das System gibt eine Liste von Diensten und Vorgängen zurück, die von den Diensten bereitgestellt werden. Sie können auch den Namespace für den Verweis auf die Dienste im Code definieren.
Im Dialogfeld " Dienstverweise konfigurieren " passen Sie die Konfiguration für einen Dienst an. Sie können die Adresse für einen Dienst ändern, Zugriffsebene, asynchrones Verhalten und Nachrichtenvertragstypen angeben und die Typwiederverwendung konfigurieren.
Dienstendpunkt
Einige WCF-Dienste machen mehrere Endpunkte verfügbar, über die Clients mit dem Dienst kommunizieren können. Ein Dienst kann einen Endpunkt verfügbar machen, der eine HTTP-Bindung mit Benutzername und Kennwortsicherheit und einen zweiten Endpunkt verwendet, der FTP mit Windows-Authentifizierung verwendet. Der erste Endpunkt wird von Anwendungen verwendet, um von außerhalb einer Firewall auf den Dienst zuzugreifen, während die zweite in einem Intranet verwendet werden kann.
In diesem Szenario geben Sie den Parameter endpointConfigurationName mit dem Konstruktor für eine Dienstreferenz an.
Hinweis
Die Anweisungen in diesem Artikel veranschaulichen die neueste Version der interaktiven Entwicklungsumgebung (Interactive Development Experience, IDE), die in Visual Studio verfügbar ist. Auf Ihrem Computer werden möglicherweise unterschiedliche Namen oder Speicherorte für einige der Benutzeroberflächenelemente angezeigt. Möglicherweise verwenden Sie eine andere Version von Visual Studio oder andere Umgebungseinstellungen. Weitere Informationen finden Sie unter Personalisieren der IDE-.
Dienstendpunkt auswählen
Wählen Sie einen Dienstendpunkt aus, indem Sie die folgenden Schritte ausführen:
Fügen Sie einen Verweis auf einen WCF-Dienst hinzu, indem Sie im Projektmappen-Explorer mit der rechten Maustaste auf den Projektknoten klicken und "Dienstverweis hinzufügen" auswählen.
Fügen Sie im Code-Editor einen Konstruktor für die Dienstreferenz hinzu. Ersetzen Sie
ServiceReferencedurch den Namespace für den Dienstverweis, und ersetzen SieService1Clientdurch den Namen des Dienstes.
Wenn Sie den Code eingeben, wird eine IntelliSense-Liste angezeigt, die die Überladungen für den Konstruktor enthält. Klicken Sie auf die
endpointConfigurationName As String-Überladung.Wenn Sie die Überladung ausgewählt haben, geben Sie
="<ServiceEndpoint>"ein, wobei<ServiceEndpoint>der Name des Endpunktdienstes ist, den Sie verwenden möchten.Tipp
Die Namen der verfügbaren Endpunkte werden in der dateiapp.config definiert.
Suchen verfügbarer Endpunkte für WCF-Dienst
Führen Sie die folgenden Schritte aus, um die verfügbaren Endpunkte für einen WCF-Dienst zu finden:
Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf die app.config Datei für das Projekt, das den Dienstverweis enthält, und wählen Sie dann "Öffnen" aus. Die Datei wird im Code-Editor geöffnet.
Suchen Sie nach dem
<Client>Tag in der Datei.Suchen Sie im
<Client>-Tagabschnitt nach einem geschachtelten Tag, das mit<Endpoint>beginnt.Wenn der Dienstverweis mehrere Endpunkte bereitstellt, gibt es zwei oder mehr
<Endpoint>Tags.Suchen Sie in der
<EndPoint>Tagdefinition denname="<ServiceEndpoint>"Parameter (wobei<ServiceEndpoint>ein Endpunktname für den Dienst steht). Dieser Wert ist der Name für den Dienst-Endpunkt, der an dieendpointConfigurationName As String-Überladung eines Konstruktors für eine Dienstreferenz übergeben werden kann.
Dienstmethoden asynchron anfragen
Die meisten Methoden in WCF-Diensten können synchron oder asynchron aufgerufen werden. Wenn Sie eine Methode asynchron aufrufen, kann Ihre Anwendung weiterhin funktionieren, während die Methode aufgerufen wird. Dieser Ansatz ist nützlich, wenn das System über eine langsame Verbindung arbeitet.
Wenn einem Projekt ein Dienstverweis hinzugefügt wird, besteht die Standardkonfiguration darin, Methoden synchron aufzurufen. Sie können das Verhalten ändern, um Methoden asynchron im Dialogfeld " Dienstreferenz konfigurieren " aufzurufen.
Die Option wird pro Dienst festgelegt. Wenn eine Methode für einen Dienst asynchron aufgerufen wird, müssen alle Methoden asynchron aufgerufen werden.
Hinweis
Die Anweisungen in diesem Artikel veranschaulichen die neueste Version der interaktiven Entwicklungsumgebung (Interactive Development Experience, IDE), die in Visual Studio verfügbar ist. Auf Ihrem Computer werden möglicherweise unterschiedliche Namen oder Speicherorte für einige der Benutzeroberflächenelemente angezeigt. Möglicherweise verwenden Sie eine andere Version von Visual Studio oder andere Umgebungseinstellungen. Weitere Informationen finden Sie unter Personalisieren der IDE-.
asynchrones Aufrufen einer Methode
Führen Sie die folgenden Schritte aus, um eine Dienstmethode asynchron aufzurufen:
Wählen Sie im Solution Explorer den Dienstverweis aus.
Wählen Sie Projekt>Dienstreferenz konfigurieren aus.
Aktivieren Sie im Dialogfeld " Dienstreferenz konfigurieren " das Kontrollkästchen "Asynchrone Vorgänge generieren ".
Binden von Daten, die vom Dienst zurückgegeben werden
Sie können daten, die von einem WCF-Dienst zurückgegeben werden, an ein Steuerelement binden, genauso wie Sie eine beliebige andere Datenquelle an ein Steuerelement binden. Wenn Sie einen Verweis auf einen WCF-Dienst hinzufügen, wenn der Dienst zusammengesetzte Typen enthält, die Daten zurückgeben, werden sie automatisch zum Fenster "Datenquellen " hinzugefügt.
Binden des Steuerelements mit dem Datenfeld, das vom WCF-Dienst zurückgegeben wird
Führen Sie die folgenden Schritte aus, um ein Steuerelement an ein einzelnes Datenfeld zu binden, das von einem WCF-Dienst zurückgegeben wird:
Wählen Sie Daten>Datenquellen anzeigen aus. Das Fenster "Datenquellen " wird geöffnet.
Erweitern Sie im Fenster Datenquellen den Knoten für Ihren Dienstverweis. Alle zusammengesetzten Typen, die von der Dienstanzeige zurückgegeben werden.
Erweitern Sie einen Typknoten, und zeigen Sie die Datenfelder für den Typ an.
Wählen Sie ein Feld aus, und erweitern Sie die Dropdownliste, um die Liste der verfügbaren Steuerelemente für den Datentyp anzuzeigen.
Wählen Sie den Typ des Steuerelements aus, an das Sie eine Bindung binden möchten.
Ziehen Sie das Feld auf ein Formular. Das Steuerelement wird dem Formular zusammen mit einer BindingSource Komponente und einer BindingNavigator Komponente hinzugefügt.
Wiederholen Sie die Schritte 4 bis 6, und binden Sie alle anderen Felder.
Binden Sie das Steuerelement an den vom WCF-Dienst zurückgegebenen zusammengesetzten Typ
Führen Sie die folgenden Schritte aus, um ein Steuerelement an einen zusammengesetzten Typ zu binden, der von einem WCF-Dienst zurückgegeben wird:
Wählen Sie Daten>Datenquellen anzeigen aus. Das Fenster "Datenquellen " wird geöffnet.
Erweitern Sie im Fenster Datenquellen den Knoten für Ihren Dienstverweis. Alle zusammengesetzten Typen, die von der Dienstanzeige zurückgegeben werden.
Wählen Sie einen Knoten für einen Typ aus, und erweitern Sie die Dropdownliste, um die Liste der verfügbaren Optionen anzuzeigen.
Wählen Sie DataGridView aus, und zeigen Sie die Daten in einem Raster an, oder wählen Sie "Details " aus, und zeigen Sie die Daten mithilfe einzelner Steuerelemente an.
Ziehen Sie den Knoten auf das Formular. Die Steuerelemente werden dem Formular zusammen mit einer BindingSource Komponente und einer BindingNavigator Komponente hinzugefügt.
Konfigurieren von Diensten für die Wiederverwendung vorhandener Typen
Wenn einem Projekt ein Dienstverweis hinzugefügt wird, werden alle im Dienst definierten Typen im lokalen Projekt generiert. In vielen Fällen erstellt dieser Ansatz doppelte Typen, wenn ein Dienst allgemeine .NET-Typen verwendet oder wenn Typen in einer freigegebenen Bibliothek definiert sind.
Um dieses Problem zu vermeiden, werden Typen in referenzierten Assemblys standardmäßig freigegeben. Wenn Sie die gemeinsame Nutzung von Typen für eine oder mehrere Systemeinheiten deaktivieren möchten, ändern Sie die Einstellungen im Dialogfeld Service-Referenzen konfigurieren.
Gemeinsame Nutzung von Typen in einer Systemeinheit deaktivieren
Sie können die gemeinsame Nutzung von Typen in einer einzelnen Systemeinheit deaktivieren, indem Sie die folgenden Schritte ausführen:
Wählen Sie im Solution Explorer den Dienstverweis aus.
Wählen Sie Projekt>Dienstreferenz konfigurieren aus.
Aktivieren Sie im Dialogfeld Service-Referenzen konfigurieren das Kontrollkästchen Typen in angegebenen referenzierten Systemeinheiten wiederverwenden.
Aktivieren Sie das Kontrollkästchen für jede Systemeinheit, für die Sie die gemeinsame Nutzung von Typen aktivieren möchten. Wenn Sie die Freigabe von Typen für eine Assembly deaktivieren möchten, lassen Sie das Kontrollkästchen leer.
Deaktivieren Sie die gemeinsame Nutzung von Typen in allen Systemeinheiten
Sie können die gemeinsame Nutzung von Typen in allen Systemeinheiten auch mit den folgenden Schritten deaktivieren:
Wählen Sie im Solution Explorer den Dienstverweis aus.
Wählen Sie Projekt>Dienstreferenz konfigurieren aus.
Deaktivieren Sie im Dialogfeld Service-Referenzen konfigurieren das Kontrollkästchen Typen in referenzierten Systemeinheiten wiederverwendenSie können die gemeinsame Nutzung von Typen in allen Systemeinheiten auch mit den folgenden Schritten deaktivieren:.
Ähnliche Konzepte erkunden
In den folgenden Artikeln werden Konzepte und Verfahren im Zusammenhang mit WCF-Diensten und WCF-Datendiensten beschrieben.
| Titel | BESCHREIBUNG |
|---|---|
| Exemplarische Vorgehensweise: Erstellen eines einfachen WCF-Diensts in Windows Forms | Stellt eine schrittweise Demonstration des Erstellens und Verwendens von WCF-Diensten in Visual Studio bereit. |
| Exemplarische Vorgehensweise: Erstellen eines WCF-Datendiensts mit WPF und Entity Framework | Stellt eine schrittweise Demonstration zum Erstellen und Verwenden von WCF Data Services in Visual Studio bereit. |
| Verwenden der WCF-Entwicklungstools | Beschreibt, wie WCF-Dienste in Visual Studio erstellt und getestet werden. |
| Vorgehensweise: Hinzufügen, Aktualisieren oder Entfernen eines WCF-Datendienstverweises | Beschreibt die Verwendung des Dialogfelds "Dienstreferenz hinzufügen", um in der Lösung nach WCF Data Services zu suchen. |
| Problembehandlung von Servicereferenzen | Enthält einige häufige Fehler, die mit Dienstverweise auftreten können und wie sie verhindert werden können. |
| Debuggen von WCF-Diensten | Beschreibt allgemeine Debuggingprobleme und -techniken, die beim Debuggen von WCF-Diensten auftreten können. |
| Exemplarische Vorgehensweise: Erstellen einer n-Ebenen-Datenanwendung | Enthält schrittweise Anleitungen zum Erstellen eines typisierten Datasets und zum Trennen des TableAdapter- und Dataset-Codes in mehrere Projekte. |
| Überprüfen des Dialogfelds "Dienstreferenz konfigurieren" | Beschreibt die Benutzeroberflächenelemente des Dialogfelds " Dienstreferenz konfigurieren ". |
Verwandte Inhalte
- Visual Studio-Datentools für .NET-
- System.ServiceModel-Namespace
- System.Data.Services-Namespace