- •Практическое руководство по программной реализации wcf-служб
- •Как определить контракт службы WindowsCommunicationFoundation
- •Как реализовать контракт службы WindowsCommunicationFoundation
- •Реализация контракта службы wcf
- •Как размещать и запускать базовую службу WindowsCommunicationFoundation
- •Создание консольного приложения для размещения службы.
- •Как создать клиент Windows Communication Foundation
- •Создание клиента Windows Communication Foundation
- •Как настроить базовый клиент Windows Communication Foundation
- •Настройка клиента Windows Communication Foundation
- •Как использовать клиент Windows Communication Foundation
- •Использование клиента Windows Communication Foundation
- •Настройка служб с использованием файлов конфигурации
- •Основные разделы файла конфигурации
- •Практическое руководство. Конфигурации привязок и поведения
- •Слияние поведений
- •Как разместить службу wcf в iis
- •Создание службы, размещенной в iis
- •Служебное средство ServiceModel Metadata Utility Tool (Svcutil.Exe)
- •Функциональные возможности
- •Время ожидания
- •Настройка для различных версий
- •Доступ к документам wsdl
- •Использование программы SvcUtil.Exe
- •Типичные способы использования
- •Создание кода
- •Экспорт метаданных
- •Проверка службы
- •Загрузка метаданных
- •Создание типа XmlSerializer
- •Примеры
- •Максимальная квота на количество символов в таблице имен.
- •Вопросы безопасности
Как разместить службу 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
Убедитесь, что службы IIS установлены и выполняются на компьютере. Дополнительные сведения о о установке и настройке служб IIS см. в разделе Установка и настройка IIS 7.0.
Создайте новую папку с именем IISHostedCalcService для файлов приложения, убедитесь, что ASP.NET имеет доступ к содержимому этой папки, и воспользуйтесь средством управления IIS для создания нового приложения служб IIS, которое физически расположено в каталоге этого приложения. Создайте для каталога приложения псевдоним «IISHostedCalc».
Создайте в каталоге приложения новый файл с именем «service.svc». Измените этот файл, добавив следующий элемент @ServiceHost.
Копировать
<%@ServiceHost language=c# Debug="true" Service="Microsoft.ServiceModel.Samples.CalculatorService"%>
В каталоге приложения создайте подкаталог App_Code.
Создайте файл кода с именем Service.cs во вложенном каталоге App_Code.
Добавьте следующие операторы using в начало файла Service.cs.
Копировать
using System;
using System.ServiceModel;
Добавьте следующее объявление пространства имен после операторов using.
Копировать
namespace Microsoft.ServiceModel.Samples
{
}
Определите контракт службы в пределах объявления пространства имен, как показано в следующем коде.
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);
}
Реализуйте контракт службы после определения контракта службы, как показано в следующем коде.
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;
}
}
Создайте в каталоге приложения файл с именем 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.
Чтобы проверить правильность размещения службы, откройте экземпляр окна 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>