DienstbeschreibungService Description

Im Beispiel "Dienstbeschreibung" wird veranschaulicht, wie ein Dienst seine Dienstbeschreibungsinformationen zur Laufzeit abrufen kann.The Service Description sample demonstrates how a service can retrieve its service description information at runtime. Das Beispiel basiert auf der Einstieg, mit einer zusätzlichen Dienstvorgang definiert, um beschreibende Informationen zum Dienst zurückzugeben.The sample is based on the Getting Started, with an additional service operation defined to return descriptive information about the service. Die zurückgegebenen Informationen enthalten die Basisadressen und Endpunkte für den Dienst.The information that is returned lists the base addresses and endpoints for the service. Der Dienst stellt diese Informationen mithilfe der Klassen OperationContext, ServiceHost und ServiceDescription bereit.The service provides this information using the OperationContext, ServiceHost, and ServiceDescription classes.

In diesem Beispiel ist der Client eine Konsolenanwendung (.exe), und der Dienst wird von IIS (Internet Information Services, Internetinformationsdienste) gehostet.In this sample, the client is a console application (.exe) and the service is hosted by Internet Information Services (IIS).

Hinweis

Die Setupprozedur und die Buildanweisungen für dieses Beispiel befinden sich am Ende dieses Themas.The setup procedure and build instructions for this sample are located at the end of this topic.

Dieses Beispiel enthält eine geänderte Version des Rechnervertrags mit der Bezeichnung IServiceDescriptionCalculator.This sample has a modified version of the calculator contract called IServiceDescriptionCalculator. Der Vertrag definiert einen zusätzlichen Dienstvorgang mit der Bezeichnung GetServiceDescriptionInfo, über den eine mehrzeilige Zeichenfolge an den Client zurückgegeben wird, die die Basisadressen oder die Adressen und Dienstendpunkte oder die Endpunkte für den Dienst beschreibt.The contract defines an additional service operation named GetServiceDescriptionInfo that returns a multi-line string to the client that describes the base address or addresses and service endpoint or endpoints for the service.

[ServiceContract(Namespace="http://Microsoft.ServiceModel.Samples")]  
public interface IServiceDescriptionCalculator  
{  
    [OperationContract]  
    int Add(int n1, int n2);  
    [OperationContract]  
    int Subtract(int n1, int n2);  
    [OperationContract]  
    int Multiply(int n1, int n2);  
    [OperationContract]  
    int Divide(int n1, int n2);  
    [OperationContract]  
    string GetServiceDescriptionInfo();  
}  

Im Implementierungscode für GetServiceDescriptionInfo wird ServiceDescription verwendet, um die Dienstendpunkte aufzulisten.The implementation code for GetServiceDescriptionInfo uses the ServiceDescription to list the service endpoints. Da Dienstendpunkte relative Adressen haben können, werden zuerst die Basisadressen für den Dienst aufgelistet.Because service endpoints can have relative addresses, it first lists the base addresses for the service. Der Code ruft seinen Vorgangskontext mithilfe von Current ab, um all diese Informationen zu erhalten.To get all of this information, the code obtains its operation context using Current. Der ServiceHost und sein ServiceDescription-Objekt werden aus dem Vorgangskontext abgerufen.The ServiceHost and its ServiceDescription object are retrieved from the operation context. Um die Basisendpunkte für den Dienst aufzulisten, durchläuft der Code die Auflistung mit BaseAddresses des Diensthosts.To list the base endpoints for the service, the code iterates through the service host's BaseAddresses collection. Um die Dienstendpunkte für den Dienst aufzulisten, durchläuft der Code die Auflistung mit Endpunkten in der Dienstbeschreibung.To list the service endpoints for the service, the code iterates through the service description's endpoints collection.

public string GetServiceDescriptionInfo()  
{  
    string info = "";  
    OperationContext operationContext = OperationContext.Current;  
    ServiceHost host = (ServiceHost)operationContext.Host;  
    ServiceDescription desc = host.Description;  
    // Enumerate the base addresses in the service host.  
    info += "Base addresses:\n";  
    foreach (Uri uri in host.BaseAddresses)  
    {  
        info += "    " + uri + "\n";  
    }  
    // Enumerate the service endpoints in the service description.  
    info += "Service endpoints:\n";  
    foreach (ServiceEndpoint endpoint in desc.Endpoints)  
    {  
        info += "    Address:  " + endpoint.Address + "\n";  
        info += "    Binding:  " + endpoint.Binding.Name + "\n";  
        info += "    Contract: " + endpoint.Contract.Name + "\n";  
    }  
     return info;  
}  

Bei der Ausführung des Beispiels werden die Rechnervorgänge und dann die vom GetServiceDescriptionInfo-Vorgang zurückgegebenen Dienstinformationen angezeigt.When you run the sample, you see the calculator operations and then the service information returned by the GetServiceDescriptionInfo operation. Drücken Sie im Clientfenster die EINGABETASTE, um den Client zu schließen.Press ENTER in the client window to shut down the client.

Add(15,3) = 18  
Subtract(145,76) = 69  
Multiply(9,81) = 729  
Divide(22,7) = 3  
GetServiceDescriptionInfo  
Base addresses:  
    http://<machine-name>/ServiceModelSamples/service.svc  
    https://<machine-name>/ServiceModelSamples/service.svc  
Service endpoints:  
    Address:  http://<machine-name>/ServiceModelSamples/service.svc  
    Binding:  WSHttpBinding  
    Contract: IServiceDescriptionCalculator  
    Address:  http://<machine-name>/ServiceModelSamples/service.svc/mex  
    Binding:  MetadataExchangeHttpBinding  
    Contract: IMetadataExchange  

Press <ENTER> to terminate client.  

So können Sie das Beispiel einrichten, erstellen und ausführenTo set up, build, and run the sample

  1. Stellen Sie sicher, dass Sie ausgeführt haben die Setupprozedur für die Windows Communication Foundation-Beispiele zum einmaligen.Ensure that you have performed the One-Time Setup Procedure for the Windows Communication Foundation Samples.

  2. Um die C#- oder Visual Basic .NET-Edition der Projektmappe zu erstellen, befolgen Sie die unter Building the Windows Communication Foundation Samplesaufgeführten Anweisungen.To build the C# or Visual Basic .NET edition of the solution, follow the instructions in Building the Windows Communication Foundation Samples.

  3. Um das Beispiel in einer einzelnen oder computerübergreifenden Konfiguration ausführen möchten, folgen Sie den Anweisungen Ausführen der Windows Communication Foundation-Beispiele.To run the sample in a single- or cross-machine configuration, follow the instructions in Running the Windows Communication Foundation Samples.

Wichtig

Die Beispiele sind möglicherweise bereits auf dem Computer installiert.The samples may already be installed on your machine. Suchen Sie nach dem folgenden Verzeichnis (Standardverzeichnis), bevor Sie fortfahren.Check for the following (default) directory before continuing.

<InstallDrive>:\WF_WCF_Samples

Wenn dieses Verzeichnis nicht vorhanden ist, fahren Sie mit Windows Communication Foundation (WCF) und Windows Workflow Foundation (WF) Samples for .NET Framework 4 aller Windows Communication Foundation (WCF) herunterladen und WFWF Beispiele.If this directory does not exist, go to Windows Communication Foundation (WCF) and Windows Workflow Foundation (WF) Samples for .NET Framework 4 to download all Windows Communication Foundation (WCF) and WFWF samples. Dieses Beispiel befindet sich im folgenden Verzeichnis.This sample is located in the following directory.

<InstallDrive>:\WF_WCF_Samples\WCF\Basic\Services\ServiceDescription

Siehe auchSee Also