Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
После разработки контракта службы (проектирование контрактов службы) и реализации контракта службы (реализация контрактов служб) можно настроить поведение операции среды выполнения службы. В этом разделе рассматриваются поведение службы и операции, предоставляемые системой, и описывается, где найти дополнительные сведения для создания новых действий. Хотя некоторые поведения применяются в качестве атрибутов, многие применяются с помощью файла конфигурации приложения или программно. Дополнительные сведения о настройке приложения-службы см. в разделе "Настройка служб".
Обзор
Контракт определяет входные данные, выходные данные, типы данных и возможности службы этого типа. Реализация контракта службы создает класс, который при настройке привязки по адресу выполняет контракт, который он реализует. Сведения о контракте, привязке и адресе известны клиенту; без них клиент не может использовать службу.
Однако специфика операций, такая как проблемы с многопоточностью или управление экземплярами, остается непрозрачной для клиентов. После реализации контракта службы можно настроить большое количество характеристик операций с помощью поведения. Поведения — это объекты, которые изменяют среду выполнения Windows Communication Foundation (WCF), задавая свойство среды выполнения или вставляя тип кастомизации в среду выполнения. Дополнительные сведения об изменении среды выполнения путем создания определяемых пользователем действий см. в разделе "Расширение ServiceHost" и уровня модели службы.
Атрибуты System.ServiceModel.ServiceBehaviorAttribute и System.ServiceModel.OperationBehaviorAttribute — это самые полезные и часто используемые функции обработки операций. Так как они являются атрибутами, их применяют к реализации службы или операции. Другие поведения, такие как System.ServiceModel.Description.ServiceMetadataBehavior или System.ServiceModel.Description.ServiceDebugBehavior, как правило, применяются с помощью файла конфигурации приложения, хотя их можно использовать программным способом.
В этом разделе представлен обзор атрибутов ServiceBehaviorAttribute и OperationBehaviorAttribute, описываются различные уровни, на которых могут работать поведения, и дается краткое описание многих системно предоставленных поведений на различных уровнях, которые могут быть интересны разработчикам WCF.
ServiceBehaviorAttribute и OperationBehaviorAttribute
Наиболее важным поведением являются атрибуты ServiceBehaviorAttribute и OperationBehaviorAttribute, которые можно использовать для управления:
Время существования экземпляра
Поддержка параллелизма и синхронизации
Поведение конфигурации
Поведение транзакций
Поведение сериализации
Преобразование метаданных
Время существования сеанса
Фильтрация адресов и обработка заголовков
Олицетворение
Чтобы использовать эти атрибуты, пометьте реализацию службы или операции с атрибутом, соответствующим этой области, и задайте свойства. Например, в следующем примере кода показана реализация операции, которая использует OperationBehaviorAttribute.Impersonation свойство для того, чтобы вызывающие операции поддерживали олицетворение.
using System;
using System.Collections.Generic;
using System.ServiceModel;
using System.Threading;
namespace Microsoft.WCF.Documentation
{
[ServiceContract(
Name="SampleHello",
Namespace="http://microsoft.wcf.documentation"
)]
public interface IHello
{
[OperationContract]
string Hello(string greeting);
}
public class HelloService : IHello
{
public HelloService()
{
Console.WriteLine("Service object created: " + this.GetHashCode().ToString());
}
~HelloService()
{
Console.WriteLine("Service object destroyed: " + this.GetHashCode().ToString());
}
[OperationBehavior(Impersonation=ImpersonationOption.Required)]
public string Hello(string greeting)
{
Console.WriteLine("Called by: " + Thread.CurrentPrincipal.Identity.Name);
Console.WriteLine("IsAuthenticated: " + Thread.CurrentPrincipal.Identity.IsAuthenticated.ToString());
Console.WriteLine("AuthenticationType: " + Thread.CurrentPrincipal.Identity.AuthenticationType.ToString());
Console.WriteLine("Caller sent: " + greeting);
Console.WriteLine("Sending back: Hi, " + Thread.CurrentPrincipal.Identity.Name);
return "Hi, " + Thread.CurrentPrincipal.Identity.Name;
}
}
}
Imports System.ServiceModel
Imports System.Threading
Namespace Microsoft.WCF.Documentation
<ServiceContract(Name:="SampleHello", Namespace:="http://microsoft.wcf.documentation")> _
Public Interface IHello
<OperationContract> _
Function Hello(ByVal greeting As String) As String
End Interface
Public Class HelloService
Implements IHello
Public Sub New()
Console.WriteLine("Service object created: " & Me.GetHashCode().ToString())
End Sub
Protected Overrides Sub Finalize()
Console.WriteLine("Service object destroyed: " & Me.GetHashCode().ToString())
End Sub
<OperationBehavior(Impersonation:=ImpersonationOption.Required)> _
Public Function Hello(ByVal greeting As String) As String Implements IHello.Hello
Console.WriteLine("Called by: " & Thread.CurrentPrincipal.Identity.Name)
Console.WriteLine("IsAuthenticated: " & Thread.CurrentPrincipal.Identity.IsAuthenticated.ToString())
Console.WriteLine("AuthenticationType: " & Thread.CurrentPrincipal.Identity.AuthenticationType.ToString())
Console.WriteLine("Caller sent: " & greeting)
Console.WriteLine("Sending back: Hi, " & Thread.CurrentPrincipal.Identity.Name)
Return "Hi, " & Thread.CurrentPrincipal.Identity.Name
End Function
End Class
End Namespace
Для многих свойств требуется дополнительная поддержка привязки. Например, операция, требующая транзакции от клиента, должна быть настроена для использования привязки, поддерживающей потоки транзакций.
Well-Known одноэлементные службы
С помощью атрибутов ServiceBehaviorAttribute и OperationBehaviorAttribute можно управлять определёнными периодами существования как объектов InstanceContext, так и объектов службы, реализующих операции.
Например, свойство ServiceBehaviorAttribute.InstanceContextMode контролирует, как часто выпускается InstanceContext, а свойства OperationBehaviorAttribute.ReleaseInstanceMode и ServiceBehaviorAttribute.ReleaseServiceInstanceOnTransactionComplete контролируют, когда освобождается объект службы.
Однако можно также создать объект службы самостоятельно и создать хост службы с помощью этого объекта. Для этого необходимо также задать свойство ServiceBehaviorAttribute.InstanceContextMode как Single, иначе при открытии узла службы будет вызвано исключение.
ServiceHost(Object, Uri[]) Используйте конструктор для создания такой службы. Он предоставляет альтернативу реализации пользовательского System.ServiceModel.Dispatcher.IInstanceContextInitializer, когда необходимо предоставить конкретный экземпляр объекта для использования одиночным сервисом. Эту перегрузку можно использовать, если тип реализации службы сложно создать (например, если он не реализует общедоступный конструктор без параметров).
Обратите внимание, что при предоставлении объекта этому конструктору некоторые функции, связанные с поведением Windows Communication Foundation (WCF), работают иначе. Например, вызов InstanceContext.ReleaseServiceInstance не влияет, когда предоставляется известный экземпляр объекта. Аналогичным образом игнорируется любой другой механизм выпуска экземпляра. Класс ServiceHost всегда ведет себя так, как будто свойство OperationBehaviorAttribute.ReleaseInstanceMode установлено на ReleaseInstanceMode.None для всех операций.
Другие службы, конечные точки, контракт и поведение операций
Поведения службы, такие как атрибут ServiceBehaviorAttribute, функционируют на уровне всей службы. Например, если для свойства ServiceBehaviorAttribute.ConcurrencyMode задано значение ConcurrencyMode.Multiple, вам нужно самостоятельно обрабатывать проблемы синхронизации потоков внутри каждой операции в этой службе. Поведения конечных точек действуют по всей конечной точке; многие из предоставляемых системой поведений конечных точек предназначены для клиентской функциональности. Поведение контрактов действует на уровне самого контракта, а поведение операций влияет на выполнение операций.
Многие из этих поведений реализуются в атрибутах, и вы используете их так же, как атрибуты ServiceBehaviorAttribute и OperationBehaviorAttribute, применяя их к соответствующему классу службы или реализации операций. Другие поведения, такие как ServiceMetadataBehavior или ServiceDebugBehavior объекты, обычно применяются с помощью файла конфигурации приложения, хотя их также можно использовать программным способом.
Например, публикация метаданных настраивается с помощью ServiceMetadataBehavior объекта. В следующем файле конфигурации приложения показаны наиболее распространенные варианты использования.
<configuration>
<system.serviceModel>
<services>
<service
name="Microsoft.WCF.Documentation.SampleService"
behaviorConfiguration="metadataSupport"
>
<host>
<baseAddresses>
<add baseAddress="http://localhost:8080/SampleService" />
</baseAddresses>
</host>
<endpoint
address=""
binding="wsHttpBinding"
contract="Microsoft.WCF.Documentation.ISampleService"
/>
<!-- Adds a WS-MetadataExchange endpoint at -->
<!-- "http://localhost:8080/SampleService/mex" -->
<endpoint
address="mex"
binding="mexHttpBinding"
contract="IMetadataExchange"
/>
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="metadataSupport">
<!-- Enables the IMetadataExchange endpoint in services that -->
<!-- use "metadataSupport" in their behaviorConfiguration attribute. -->
<!-- In addition, the httpGetEnabled and httpGetUrl attributes publish -->
<!-- Service metadata for retrieval by HTTP/GET at the address -->
<!-- "http://localhost:8080/SampleService?wsdl" -->
<serviceMetadata httpGetEnabled="true" httpGetUrl=""/>
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
</configuration>
В следующих разделах описаны многие из самых полезных действий, предоставляемых системой, которые можно использовать для изменения процесса выполнения вашей службы или клиентского приложения. См. справочный раздел, чтобы определить, как использовать каждую из них.
Поведение службы
Следующее поведение действует на службы.
AspNetCompatibilityRequirementsAttribute. Применяется к службе WCF, чтобы указать, может ли эта служба выполняться в режиме совместимости ASP.NET.
ServiceAuthorizationBehavior. Управляет тем, как служба авторизует утверждения клиента.
ServiceCredentials. Настраивает учетные данные для сервиса. Используйте этот класс, чтобы указать учетные данные для службы, например сертификат X.509.
ServiceDebugBehavior. Активирует возможности отладки и справочной информации для службы WCF.
ServiceMetadataBehavior. Управляет публикацией метаданных службы и связанных сведений.
ServiceSecurityAuditBehavior. Указывает поведение аудита событий безопасности.
ServiceThrottlingBehavior. Настраивает параметры пропускной способности во время выполнения, позволяющие настроить производительность службы.
Поведение конечных точек
Следующие действия выполняются на конечных точках. Многие из этих действий используются в клиентских приложениях.
CallbackBehaviorAttribute. Настраивает реализацию службы обратного вызова в дуплексном клиентском приложении.
CallbackDebugBehavior. Включает отладку службы для объекта обратного вызова WCF.
ClientCredentials. Позволяет пользователю настраивать учетные данные клиента и службы, а также параметры проверки подлинности учетных данных службы для использования на клиенте.
ClientViaBehavior. Используется клиентами для указания универсального идентификатора ресурса (URI), для которого следует создать транспортный канал.
MustUnderstandBehavior. Указывает WCF отключить обработку
MustUnderstand
.SynchronousReceiveBehavior. Указывает среде выполнения использовать синхронный процесс получения для каналов.
TransactedBatchingBehavior. Оптимизирует операции получения для транспорта, поддерживающего транзакционные получения.
Особенности контракта
DeliveryRequirementsAttribute. Определяет требования к характеристикам, которые привязки обязаны предоставлять службе или реализации клиента.
Поведение операций
Во cледующих поведениях операций указываются элементы управления сериализацией и транзакциями.
DataContractSerializerOperationBehavior. Представляет поведение во время выполнения объекта System.Runtime.Serialization.DataContractSerializer.
XmlSerializerOperationBehavior. Управляет поведением
XmlSerializer
во время выполнения и связывает его с операцией.TransactionFlowAttribute. Указывает уровень, в котором операция службы принимает заголовок транзакции.