Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
[ПСП] Учебник WCF.docx
Скачиваний:
48
Добавлен:
26.03.2016
Размер:
147.76 Кб
Скачать

Как разместить службу wcf в iis

.NET Framework 4.5

Другие версии

  • .NET Framework 4

В этом разделе описаны основные шаги по созданию службы Windows Communication Foundation (WCF), размещенной в службах IIS. Предполагается, что читатель знаком со службами IIS и может использовать средство управления IIS для создания приложений служб IIS и управления такими приложениями. Дополнительные сведения о о службах IIS см. в разделе Internet Information Services (на английском языке)Служба WCF, работающая в среде служб IIS, полностью использует функции IIS, в том числе очистку процессов, завершение работы после бездействия, наблюдение за работоспособностью процессов и активацию с помощью сообщений. Для реализации этого варианта размещения требуется правильно настроить службу IIS, но не требуется включать в приложение код размещения. Размещение в службах IIS возможно только при использовании транспорта HTTP.

Дополнительные сведения о о взаимодействии WCF и ASP.NET см. в разделе Службы WCF и ASP.NET. Дополнительные сведения о о настройка системы безопасности см. в разделеБезопасность Windows Communication Foundation.

Копию исходного кода этого примера см. в разделе Размещение в службах IIS с использованием встроенного кода.

Создание службы, размещенной в iis

  1. Убедитесь, что службы IIS установлены и выполняются на компьютере. Дополнительные сведения о о установке и настройке служб IIS см. в разделе Установка и настройка IIS 7.0.

  2. Создайте новую папку с именем IISHostedCalcService для файлов приложения, убедитесь, что ASP.NET имеет доступ к содержимому этой папки, и воспользуйтесь средством управления IIS для создания нового приложения служб IIS, которое физически расположено в каталоге этого приложения. Создайте для каталога приложения псевдоним «IISHostedCalc».

  3. Создайте в каталоге приложения новый файл с именем «service.svc». Измените этот файл, добавив следующий элемент @ServiceHost.

Копировать

<%@ServiceHost language=c# Debug="true" Service="Microsoft.ServiceModel.Samples.CalculatorService"%>

  1. В каталоге приложения создайте подкаталог App_Code.

  2. Создайте файл кода с именем Service.cs во вложенном каталоге App_Code.

  3. Добавьте следующие операторы using в начало файла Service.cs.

Копировать

using System;

using System.ServiceModel;

  1. Добавьте следующее объявление пространства имен после операторов using.

Копировать

namespace Microsoft.ServiceModel.Samples

{

}

  1. Определите контракт службы в пределах объявления пространства имен, как показано в следующем коде.

C#

VB

Копировать

[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);

}

  1. Реализуйте контракт службы после определения контракта службы, как показано в следующем коде.

C#

VB

Копировать

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;

}

}

  1. Создайте в каталоге приложения файл с именем Web.config и добавьте в него следующий код конфигурации. Во время выполнения инфраструктура WCF использует эти данные для создания конечной точки, с которой могут взаимодействовать клиентские приложения.

Xml

Копировать

<?xml version="1.0" encoding="utf-8" ?>

<configuration>

<system.serviceModel>

<services>

<!-- This section is optional with the default configuration

model introduced in .NET Framework 4 -->

<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 exposed at http://localhost/servicemodelsamples/service.svc/mex -->

<endpoint address="mex"

binding="mexHttpBinding"

contract="IMetadataExchange" />

</service>

</services>

</system.serviceModel>

</configuration>

В этом примере конечные точки явно задаются в файле конфигурации.Если в службу не добавлена ни одна конечная точка, то среда выполнения добавляет конечные точки по умолчанию.Дополнительные сведения о о конечных точках по умолчанию, привязках и поведениях см. в разделах Упрощенная конфигурацияиУпрощенная конфигурация служб WCF.

  1. Чтобы проверить правильность размещения службы, откройте экземпляр окна Internet Explorer и перейдите по URL-адресу службы: http://localhost/IISHostedCalc/Service.svc.

Пример

Далее представлен полный код службы калькулятора, размещаемой в IIS.

VB

Копировать

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

C#

Копировать

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;

}

}

None

Копировать

<?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>