Практическое руководство. Размещение службы WCF в IISHow to: Host a WCF Service in IIS

В этом разделе описаны основные шаги для создания службы Windows Communication Foundation (WCF), размещенного в Internet Information Services (IIS).This topic outlines the basic steps required to create a Windows Communication Foundation (WCF) service that is hosted in Internet Information Services (IIS). Предполагается, что читатель знаком со службами IIS и может использовать средство управления IIS для создания приложений служб IIS и управления такими приложениями.This topic assumes you are familiar with IIS and understand how to use the IIS management tool to create and manage IIS applications. Дополнительные сведения о службах IIS см. в разделе Internet Information Services.For more information about IIS see Internet Information Services. Службы WCF, которая выполняется в среде IIS использует все преимущества функции IIS, такие как перезапуск процессов, бездействует, завершение работы, наблюдение за работоспособностью процессов и активация на основе сообщений.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. Для реализации этого варианта размещения требуется правильно настроить службу IIS, но не требуется включать в приложение код размещения.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. Размещение в службах IIS возможно только при использовании транспорта HTTP.You can use IIS hosting only with an HTTP transport.

Дополнительные сведения о взаимодействия WCF и ASP.NET, см. в разделе службы WCF и ASP.NET.For more information about how WCF and ASP.NET interact, see WCF Services and ASP.NET. Дополнительные сведения о настройке безопасности см. в разделе безопасности.For more information about configuring security, see Security.

Копию исходного кода в этом примере, см. в разделе IIS размещение с помощью встроенного кода.For the source copy of this example, see IIS Hosting Using Inline Code.

Создание службы, размещенной в IISTo create a service hosted by IIS

  1. Убедитесь, что службы IIS установлены и выполняются на компьютере.Confirm that IIS is installed and running on your computer. Дополнительные сведения об установке и настройке служб IIS см. в разделе Установка и настройка IIS 7.0For more information about installing and configuring IIS see Installing and Configuring IIS 7.0

  2. Создайте новую папку для файлов приложения называется «IISHostedCalcService», убедитесь, что ASP.NET имеет доступ к содержимому папки и использовать средство управления IIS для создания нового приложения IIS, которое физически расположено в каталоге этого приложения.Create a new folder for your application files called "IISHostedCalcService", ensure that ASP.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. Создайте для каталога приложения псевдоним «IISHostedCalc».When creating an alias for the application directory use "IISHostedCalc".

  3. Создайте в каталоге приложения новый файл с именем «service.svc».Create a new file named "service.svc" in the application directory. Измените этот файл, добавив следующий @ServiceHost элемент.Edit this file by adding the following @ServiceHost element.

    <%@ServiceHost language=c# Debug="true" Service="Microsoft.ServiceModel.Samples.CalculatorService"%>  
    
  4. В каталоге приложения создайте подкаталог App_Code.Create an App_Code subdirectory within the application directory.

  5. Создайте файл кода с именем Service.cs во вложенном каталоге App_Code.Create a code file named Service.cs in the App_Code subdirectory.

  6. Добавьте следующие операторы using в начало файла Service.cs.Add the following using statements to the top of the Service.cs file.

    using System;  
    using System.ServiceModel;  
    
  7. Добавьте следующее объявление пространства имен после операторов using.Add the following namespace declaration after the using statements.

    namespace Microsoft.ServiceModel.Samples  
    {  
    }  
    
  8. Определите контракт службы в пределах объявления пространства имен, как показано в следующем коде.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. Реализуйте контракт службы после определения контракта службы, как показано в следующем коде.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. Создайте в каталоге приложения файл с именем Web.config и добавьте в него следующий код конфигурации.Create a file named "Web.config" in the application directory and add the following configuration code into the file. Во время выполнения инфраструктура WCF использует сведения для создания клиентских приложений для взаимодействия с конечной точки.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>
    
    

    В этом примере конечные точки явно задаются в файле конфигурации.This example explicitly specifies endpoints in the configuration file. Если в службу не добавлена ни одна конечная точка, то среда выполнения добавляет конечные точки по умолчанию.If you do not add any endpoints to the service, the runtime adds default endpoints for you. Дополнительные сведения о конечных точках по умолчанию, привязок и поведений см. в разделе Simplified Configuration и Simplified Configuration for WCF Services.For more information about default endpoints, bindings, and behaviors see Simplified Configuration and Simplified Configuration for WCF Services.

  11. Чтобы проверить правильность размещения службы, откройте экземпляр окна Internet Explorer и перейдите по URL-адресу службы: http://localhost/IISHostedCalc/Service.svc.To 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

ПримерExample

Далее представлен полный код службы калькулятора, размещаемой в IIS.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>

См. такжеSee also