Gewusst wie: Hosten eines WCF-Diensts in IISHow to: Host a WCF Service in IIS

Dieses Thema beschreibt die grundlegenden Schritte zum Erstellen eines Windows Communication Foundation (WCF)-Diensts, das gehostet wird in Internet Information Services (IIS) erforderlich.This topic outlines the basic steps required to create a Windows Communication Foundation (WCF) service that is hosted in Internet Information Services (IIS). Es wird vorausgesetzt, dass Sie mit IIS vertraut sind und wissen, wie mithilfe des IIS-Verwaltungstools IIS-Anwendungen erstellt und verwaltet werden.This topic assumes you are familiar with IIS and understand how to use the IIS management tool to create and manage IIS applications. Weitere Informationen zu IIS finden Sie unter Internetinformationsdienste (IIS).For more information about IIS see Internet Information Services. Ein WCF-Dienst, der ausgeführt wird, in der IIS-Umgebung nutzt die Vorteile der IIS-Funktionen, beispielsweise die prozesswiederverwendung, im Leerlauf Herunterfahren, die prozessüberwachung und die Nachrichtenbasierte Aktivierung.A WCF service that runs in the IIS environment takes full advantage of IIS features, such as process recycling, idle shutdown, process health monitoring, and message-based activation. Diese Hostingoption erfordert, dass IIS korrekt konfiguriert wurde, jedoch muss keinerlei Hostcode für die Anwendung geschrieben werden.This hosting option requires that IIS be properly configured, but it does not require that any hosting code be written as part of the application. Sie können IIS-Hosting nur mit einem HTTP-Transport verwenden.You can use IIS hosting only with an HTTP transport.

Weitere Informationen dazu, wie WCF und ASP.NETASP.NET interagieren, finden Sie unter WCF-Dienste und ASP.NET.For more information about how WCF and ASP.NETASP.NET interact, see WCF Services and ASP.NET. Weitere Informationen zum Konfigurieren der Sicherheit finden Sie unter Sicherheit.For more information about configuring security, see Security.

Eine Kopie der Quelle dieses Beispiels, finden Sie unter IIS-Hosting mithilfe von Inlinecode.For the source copy of this example, see IIS Hosting Using Inline Code.

So erstellen Sie einen von IIS gehosteten DienstTo create a service hosted by IIS

  1. Vergewissern Sie sich, dass IIS installiert ist und auf dem Computer ausgeführt wird.Confirm that IIS is installed and running on your computer. Weitere Informationen zum Installieren und Konfigurieren von IIS finden Sie unter installieren und Konfigurieren von IIS 7.0For more information about installing and configuring IIS see Installing and Configuring IIS 7.0

  2. Erstellen Sie einen neuen Ordner namens "IISHostedCalcService" für die Anwendungsdateien, stellen Sie sicher, dass ASP.NETASP.NET auf den Inhalt des Ordners zugreifen kann, und verwenden Sie das IIS-Verwaltungstool, um eine neue IIS-Anwendung zu erstellen, die physisch in diesem Anwendungsverzeichnis gespeichert wird.Create a new folder for your application files called "IISHostedCalcService", ensure that ASP.NETASP.NET has access to the contents of the folder, and use the IIS management tool to create a new IIS application that is physically located in this application directory. Verwenden Sie "IISHostedCalc", wenn Sie einen Alias für das Anwendungsverzeichnis erstellen.When creating an alias for the application directory use "IISHostedCalc".

  3. Erstellen Sie eine neue Datei namens "service.svc" im Anwendungsverzeichnis.Create a new file named "service.svc" in the application directory. Diese Datei bearbeiten, indem Sie den folgenden Code @ServiceHost Element.Edit this file by adding the following @ServiceHost element.

    <%@ServiceHost language=c# Debug="true" Service="Microsoft.ServiceModel.Samples.CalculatorService"%>  
    
  4. Erstellen Sie im Stammverzeichnis der Anwendung das Unterverzeichnis App_Code.Create an App_Code subdirectory within the application directory.

  5. Erstellen Sie eine Codedatei namens "Service.svc" im Unterverzeichnis "App_Code".Create a code file named Service.cs in the App_Code subdirectory.

  6. Fügen Sie am Anfang der Datei "Service.cs" die folgenden using-Anweisungen hinzu:Add the following using statements to the top of the Service.cs file.

    using System;  
    using System.ServiceModel;  
    
  7. Fügen Sie nach den using-Anweisungen die folgende Namespacedeklaration hinzu.Add the following namespace declaration after the using statements.

    namespace Microsoft.ServiceModel.Samples  
    {  
    }  
    
  8. Definieren Sie den Dienstvertrag in der Namespacedeklaration, wie im folgenden Code gezeigt.Define the service contract inside the namespace declaration as shown in the following code.

    [ServiceContract]
    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);
    }
    
    
    <ServiceContract()> _
    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
    
    
  9. Implementieren Sie den Dienstvertrag nach der Dienstvertragsdefinition, wie im folgenden Code gezeigt.Implement the service contract after the service contract definition as shown in the following code.

    public class CalculatorService : ICalculator
    {
       public double Add(double n1, double n2)
       {
          return n1 + n2;
       }
       public double Subtract(double n1, double n2)
       {
          return n1 - n2;
       }
       public double Multiply(double n1, double n2)
       {
          return n1 * n2;
       }
       public double Divide(double n1, double n2)
       {
          return n1 / n2;
       }
    } 
    
    
    Public Class CalculatorService
        Implements ICalculator
        Public Function Add(ByVal n1 As Double, _
                            ByVal n2 As Double) As Double Implements ICalculator.Add
            Return n1 + n2
        End Function
    
        Public Function Subtract(ByVal n1 As Double, _
                                 ByVal n2 As Double) As Double Implements ICalculator.Subtract
            Return n1 - n2
        End Function
    
        Public Function Multiply(ByVal n1 As Double, _
                                 ByVal n2 As Double) As Double Implements ICalculator.Multiply
            Return n1 * n2
        End Function
    
        Public Function Divide(ByVal n1 As Double, _
                               ByVal n2 As Double) As Double Implements ICalculator.Divide
            Return n1 / n2
        End Function
    End Class
    
    
  10. Erstellen Sie eine Datei namens "Web.config" im Anwendungsverzeichnis, und fügen Sie der Datei den folgenden Konfigurationscode hinzu.Create a file named "Web.config" in the application directory and add the following configuration code into the file. Zur Laufzeit verwendet die WCF-Infrastruktur die Informationen, um einen Endpunkt zu erstellen, dem mit dem Clientanwendungen kommunizieren können.At runtime, the WCF infrastructure uses the information to construct an endpoint that client applications can communicate with.

    
    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
      <system.serviceModel>
        <services>
          <service name="Microsoft.ServiceModel.Samples.CalculatorService">
    
            <!-- This endpoint is exposed at the base address provided by host: http://localhost/servicemodelsamples/service.svc -->
            <endpoint address=""
                      binding="wsHttpBinding"
                      contract="Microsoft.ServiceModel.Samples.ICalculator" />
    
            <!-- The mex endpoint is explosed at http://localhost/servicemodelsamples/service.svc/mex -->
            <endpoint address="mex"
                      binding="mexHttpBinding"
                      contract="IMetadataExchange" />
          </service>
        </services>
      </system.serviceModel>
    
    </configuration>
    
    

    In diesem Beispiel werden die Endpunkte in der Konfigurationsdatei explizit angegeben.This example explicitly specifies endpoints in the configuration file. Wenn Sie dem Dienst keine Endpunkte hinzufügen, werden von der Runtime automatisch Standardendpunkte hinzugefügt.If you do not add any endpoints to the service, the runtime adds default endpoints for you. Weitere Informationen zu Standardendpunkten, Bindungen und Verhaltensweisen finden Sie unter vereinfachte Konfiguration und vereinfachte Konfiguration für WCF-Dienste.For more information about default endpoints, bindings, and behaviors see Simplified Configuration and Simplified Configuration for WCF Services.

  11. Um sicherzustellen, dass der Dienst korrekt gehostet wird, öffnen Sie eine Instanz von Internet Explorer, und navigieren Sie zur URL des Diensts: http://localhost/IISHostedCalc/Service.svcTo make sure the service is hosted correctly, open an instance of Internet Explorer and browse to the service's URL: http://localhost/IISHostedCalc/Service.svc

BeispielExample

Im Folgenden finden Sie eine vollständige Auflistung des Codes für den von IIS gehosteten Dienst.The following is a complete listing of the code for the IIS hosted calculator service.

using System;
using System.ServiceModel;

namespace Microsoft.ServiceModel.Samples
{

  [ServiceContract]
  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);
  }


  public class CalculatorService : ICalculator
  {
     public double Add(double n1, double n2)
     {
        return n1 + n2;
     }
     public double Subtract(double n1, double n2)
     {
        return n1 - n2;
     }
     public double Multiply(double n1, double n2)
     {
        return n1 * n2;
     }
     public double Divide(double n1, double n2)
     {
        return n1 / n2;
     }
  } 


Imports System
Imports System.ServiceModel

Namespace Microsoft.ServiceModel.Samples

    <ServiceContract()> _
    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


    Public Class CalculatorService
        Implements ICalculator
        Public Function Add(ByVal n1 As Double, _
                            ByVal n2 As Double) As Double Implements ICalculator.Add
            Return n1 + n2
        End Function

        Public Function Subtract(ByVal n1 As Double, _
                                 ByVal n2 As Double) As Double Implements ICalculator.Subtract
            Return n1 - n2
        End Function

        Public Function Multiply(ByVal n1 As Double, _
                                 ByVal n2 As Double) As Double Implements ICalculator.Multiply
            Return n1 * n2
        End Function

        Public Function Divide(ByVal n1 As Double, _
                               ByVal n2 As Double) As Double Implements ICalculator.Divide
            Return n1 / n2
        End Function
    End Class


<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <system.serviceModel>
    <services>
      <service name="Microsoft.ServiceModel.Samples.CalculatorService">

        <!-- This endpoint is exposed at the base address provided by host: http://localhost/servicemodelsamples/service.svc -->
        <endpoint address=""
                  binding="wsHttpBinding"
                  contract="Microsoft.ServiceModel.Samples.ICalculator" />

        <!-- The mex endpoint is explosed at http://localhost/servicemodelsamples/service.svc/mex -->
        <endpoint address="mex"
                  binding="mexHttpBinding"
                  contract="IMetadataExchange" />
      </service>
    </services>
  </system.serviceModel>

</configuration>

Siehe auchSee Also

Hosten in IIS (Internetinformationsdienste)Hosting in Internet Information Services
Hosting-DiensteHosting Services
WCF-Dienste und ASP.NETWCF Services and ASP.NET
SicherheitSecurity
Windows Server AppFabric-HostingfunktionenWindows Server App Fabric Hosting Features