Поделиться через


Указание поведения службы во время выполнения

После создания (Создание контрактов служб) и реализации (Реализация контрактов служб) контракта службы можно переходить к настройке рабочего поведения среды выполнения службы. В этом разделе рассматриваются предоставляемые системой поведения служб и операций, а также указывается, где можно найти дополнительные сведения по созданию новых поведений. Хотя некоторые поведения применяются как атрибуты, многие поведения применяются с помощью файла конфигурации приложения или программно. Дополнительные сведения настройке приложения службы см. в разделе Настройка служб.

Общие сведения

Контракт определяет входные данные, выходные данные, типы данных и возможности службы этого типа. При реализации контракта службы создается класс, которой, при настройке с привязкой к адресу, выполняет реализуемый им контракт. Сведения о контракте, привязке и адресе известны клиенту; без этих сведений клиент не может пользоваться службой.

Однако конкретные сведения об операциях, такие как сведения о потоках или управлении экземплярами, не видны клиентам. После реализации контракта службы можно настроить большое количество характеристик операций с помощью поведений. Поведения представляют собой объекты, изменяющие среду выполнения 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, которые можно использовать для управления указанными ниже характеристиками.

  • Время существования экземпляра

  • Поддержка параллелизма и синхронизации

  • Поведение конфигурации

  • Поведение транзакции

  • Поведение сериализации

  • Преобразование метаданных

  • Время существования сеанса

  • Фильтрация адресов и обработка заголовков

  • Олицетворение

  • Для использования этих атрибутов пометьте реализацию службы или операции атрибутом, подходящим для определенной области и набора свойств. Например, в следующем примере кода показана реализация операции, в которой с помощью свойства System.ServiceModel.OperationBehaviorAttribute.Impersonation задается требование, чтобы вызывающая сторона этой операции поддерживала олицетворение.

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

Многие свойства требуют дополнительной поддержки со стороны привязки. Например, операция, которой требуется транзакция от клиента, должна быть настроена для использования привязки, поддерживающей поток транзакций.

Широко известные одноэлементные службы

Атрибуты ServiceBehaviorAttribute и OperationBehaviorAttribute можно использовать для управления определенными временами существования, как InstanceContext, так и объектов службы, реализующих операции.

Например, свойство System.ServiceModel.ServiceBehaviorAttribute.InstanceContextMode управляет частотой высвобождения InstanceContext, а свойства System.ServiceModel.OperationBehaviorAttribute.ReleaseInstanceMode и System.ServiceModel.ServiceBehaviorAttribute.ReleaseServiceInstanceOnTransactionComplete управляют моментом высвобождения объекта службы.

Однако можно также самому создать объект службы, а затем создать основное приложение службы, используя этот объект. Для этого необходимо задать для свойства System.ServiceModel.ServiceBehaviorAttribute.InstanceContextMode значение Single — в противном случае при открытии основного приложения службы возникает исключение.

Для создания такой службы используйте конструктор System.ServiceModel.ServiceHost.#ctor(System.Object,System.Uri[]). Он обеспечивает альтернативу реализации пользовательского System.ServiceModel.Dispatcher.IInstanceContextInitializer, если требуется предоставить определенный экземпляр объекта для использования одноэлементной службой. Этот перегружаемый метод можно использовать, когда тип реализации службы не позволяет легко использовать конструктор (например, если он не реализует открытый конструктор по умолчанию, не имеющий параметров).

Обратите внимание, что когда этому конструктору передается объект, некоторые функции Windows Communication Foundation (WCF), связанные с созданием экземпляров, работают по-другому. Например, вызов System.ServiceModel.InstanceContext.ReleaseServiceInstance не выполняет никаких действий, если предоставлен экземпляр хорошо известного объекта. Аналогичным образом игнорируются все другие механизмы освобождения экземпляров. Класс ServiceHost всегда ведет себя таким образом, как если бы для свойства System.ServiceModel.OperationBehaviorAttribute.ReleaseInstanceMode было задано значение System.ServiceModel.ReleaseInstanceMode.None для всех операций.

Другие поведения службы, конечной точки, контракта и операции

Поведения службы, такие как атрибут ServiceBehaviorAttribute, действуют во всей службе. Например, если для свойства System.ServiceModel.ServiceBehaviorAttribute.ConcurrencyMode задано значение System.ServiceModel.ConcurrencyMode.Multiple, необходимо самостоятельно обрабатывать вопросы синхронизации потоков внутри каждой операции службы. Поведения конечной точки действуют на уровне конечной точки; многие из предоставляемых системой поведений конечных точек предназначены для функциональных возможностей клиентов. Поведения контракта действуют на уровне контракта, а поведения операции изменяют доставку операции.

Многие из этих поведений реализованы атрибутами, и их можно использовать так же, как и атрибуты ServiceBehaviorAttribute и OperationBehaviorAttribute — применяя их к определенной реализации класса службы или операции. Другие поведения, такие как объекты ServiceMetadataBehavior и ServiceDebugBehavior, обычно применяются с помощью файла конфигурации приложения, хотя их можно также использовать программно.

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

<configuration>
  <system.serviceModel>
    <services>
      <service 
        name="Microsoft.WCF.Documentation.SampleService"
        behaviorConfiguration="metadataSupport"
      >
        <host>
          <baseAddresses>
            <add baseAddress="https://localhost:8080/SampleService" />
          </baseAddresses>
        </host>
        <endpoint
          address=""
          binding="wsHttpBinding"
          contract="Microsoft.WCF.Documentation.ISampleService"
        />
        <!-- Adds a WS-MetadataExchange endpoint at -->
        <!-- "https://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 -->
        <!-- "https://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. Задает требования к функциям, которые должны поддерживаться привязками для реализации службы или клиента.

Поведения операций

Указанные ниже поведения операций задают элементы управления сериализацией и транзакциями для операций.

См. также

Задачи

Как управлять созданием экземпляров служб

Другие ресурсы

Настройка служб