Hizmet Çalışma Zamanı Davranışını Belirtme

Bir hizmet sözleşmesi (Hizmet Sözleşmeleri Tasarlama) tasarladıktan ve hizmet sözleşmenizi (Hizmet Sözleşmelerini Uygulama) uyguladıktan sonra, hizmet çalışma zamanının işlem davranışını yapılandırabilirsiniz. Bu konu, sistem tarafından sağlanan hizmet ve işlem davranışlarını açıklar ve yeni davranışlar oluşturmak için daha fazla bilginin nerede bulunacağını açıklar. Bazı davranışlar öznitelik olarak uygulanırken, çoğu uygulama yapılandırma dosyası kullanılarak veya program aracılığıyla uygulanır. Hizmet uygulamanızı yapılandırma hakkında daha fazla bilgi için bkz . Hizmetleri Yapılandırma.

Genel bakış

Sözleşme, bu türdeki bir hizmetin girişlerini, çıkışlarını, veri türlerini ve özelliklerini tanımlar. Hizmet sözleşmesi uygulamak, bir adreste bağlama ile yapılandırıldığında uyguladığı sözleşmeyi yerine getiren bir sınıf oluşturur. Sözleşme, bağlama ve adres bilgilerinin tümü istemci tarafından bilinir; bunlar olmadan istemci hizmeti kullanamaz.

Ancak, iş parçacığı sorunları veya örnek yönetimi gibi işlem özellikleri istemciler için opaktır. Hizmet sözleşmenizi uyguladıktan sonra, davranışları kullanarak çok sayıda işlem özelliği yapılandırabilirsiniz. Davranışlar, bir çalışma zamanı özelliği ayarlayarak veya çalışma zamanına özelleştirme türü ekleyerek Windows Communication Foundation (WCF) çalışma zamanını değiştiren nesnelerdir. Kullanıcı tanımlı davranışlar oluşturarak çalışma zamanını değiştirme hakkında daha fazla bilgi için bkz . ServiceHost ve Hizmet Modeli Katmanını Genişletme.

System.ServiceModel.ServiceBehaviorAttribute ve System.ServiceModel.OperationBehaviorAttribute öznitelikleri en kullanışlı davranışlardır ve en sık istenen işlem özelliklerini kullanıma sunar. Bunlar öznitelik olduğundan, bunları hizmet veya işlem uygulamasına uygularsınız. veya System.ServiceModel.Description.ServiceDebugBehaviorgibi System.ServiceModel.Description.ServiceMetadataBehavior diğer davranışlar genellikle bir uygulama yapılandırma dosyası kullanılarak uygulanır, ancak bunları program aracılığıyla kullanabilirsiniz.

Bu konu, ve OperationBehaviorAttribute özniteliklerine genel bir bakış ServiceBehaviorAttribute sağlar, davranışların çalışabileceği çeşitli kapsamları açıklar ve WCF geliştiricilerinin ilgisini çekebilecek çeşitli kapsamlarda sistem tarafından sağlanan davranışların birçoğunun hızlı bir açıklamasını sağlar.

ServiceBehaviorAttribute ve OperationBehaviorAttribute

En önemli davranışlar, denetlemek için kullanabileceğiniz ve OperationBehaviorAttribute öznitelikleridirServiceBehaviorAttribute:

  • Örnek yaşam süreleri

  • Eşzamanlılık ve eşitleme desteği

  • Yapılandırma davranışı

  • İşlem davranışı

  • Serileştirme davranışı

  • Meta veri dönüştürme

  • Oturum ömrü

  • Adres filtreleme ve üst bilgi işleme

  • Kimliğe bürünme

  • Bu öznitelikleri kullanmak için hizmet veya işlem uygulamasını bu kapsama uygun özniteliğiyle işaretleyin ve özellikleri ayarlayın. Örneğin, aşağıdaki kod örneği, bu işlemin çağıranlarının kimliğe bürünme özelliğini desteklemesini OperationBehaviorAttribute.Impersonation gerektiren bir işlem uygulamasını gösterir.

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

Özelliklerin çoğu bağlamadan ek destek gerektirir. Örneğin, istemciden bir işlem gerektiren bir işlem, akışlı işlemleri destekleyen bir bağlama kullanacak şekilde yapılandırılmalıdır.

İyi Bilinen Singleton Hizmetleri

ve OperationBehaviorAttribute özniteliklerini, işlemleri uygulayan hizmet nesnelerinin InstanceContext hem hem de belirli yaşamlarını denetlemek için kullanabilirsinizServiceBehaviorAttribute.

Örneğin özelliği, öğesinin ServiceBehaviorAttribute.InstanceContextMode ne sıklıkta InstanceContext serbest bırakıldığı ve OperationBehaviorAttribute.ReleaseInstanceMode ve ServiceBehaviorAttribute.ReleaseServiceInstanceOnTransactionComplete özellikleri, hizmet nesnesinin ne zaman serbest bırakıldığı denetler.

Ancak, kendiniz bir hizmet nesnesi oluşturabilir ve bu nesneyi kullanarak hizmet ana bilgisayarını oluşturabilirsiniz. Bunu yapmak için, özelliğini Single de olarak ayarlamanız ServiceBehaviorAttribute.InstanceContextMode gerekir veya hizmet konağı açıldığında bir özel durum oluşturulur.

Böyle bir hizmet oluşturmak için oluşturucuyu ServiceHost(Object, Uri[]) kullanın. Tek bir hizmet tarafından kullanılmak üzere belirli bir nesne örneği sağlamak istediğinizde özel System.ServiceModel.Dispatcher.IInstanceContextInitializer uygulama için bir alternatif sağlar. Hizmet uygulama türünüzü oluşturmak zor olduğunda (örneğin, parametresiz bir ortak oluşturucu uygulamazsa) bu aşırı yüklemeyi kullanabilirsiniz.

Bu oluşturucuya bir nesne sağlandığında, Windows Communication Foundation (WCF) ile ilgili bazı özelliklerin farklı çalıştığını unutmayın. Örneğin, iyi bilinen bir nesne örneği sağlandığında çağrının InstanceContext.ReleaseServiceInstance hiçbir etkisi olmaz. Benzer şekilde, diğer tüm örnek yayın mekanizmaları yoksayılır. ServiceHost sınıfı her zaman özelliği tüm işlemler için olarak ayarlanmış ReleaseInstanceMode.None gibi OperationBehaviorAttribute.ReleaseInstanceMode davranır.

Diğer Hizmet, Uç Nokta, Sözleşme ve İşlem Davranışları

Özniteliği gibi hizmet davranışları, hizmetin tamamında ServiceBehaviorAttribute çalışır. Örneğin, özelliğini ConcurrencyMode.Multiple olarak ayarlarsanız, bu hizmetteki ServiceBehaviorAttribute.ConcurrencyMode her işlem içinde iş parçacığı eşitleme sorunlarını kendiniz işlemeniz gerekir. Uç nokta davranışları bir uç nokta arasında çalışır; sistem tarafından sağlanan uç nokta davranışlarının çoğu istemci işlevselliğine yöneliktir. Sözleşme davranışları sözleşme düzeyinde çalışır ve işlem davranışları işlem teslimini değiştirir.

Bu davranışların çoğu özniteliklere uygulanır ve ve özniteliklerini yaparken ServiceBehaviorAttributeOperationBehaviorAttribute bunları uygun hizmet sınıfına veya işlem uygulamasına uygulayarak kullanırsınız. Veya ServiceDebugBehavior nesneleri gibi ServiceMetadataBehavior diğer davranışlar genellikle bir uygulama yapılandırma dosyası kullanılarak uygulanır, ancak bunlar program aracılığıyla da kullanılabilir.

Örneğin, meta verilerin yayımlanması nesnesi kullanılarak ServiceMetadataBehavior yapılandırılır. Aşağıdaki uygulama yapılandırma dosyası en yaygın kullanımı gösterir.

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

Aşağıdaki bölümlerde, hizmetinizin veya istemcinizin çalışma zamanı teslimini değiştirmek için kullanabileceğiniz en kullanışlı sistem tarafından sağlanan davranışların birçoğu açıklanmaktadır. Her birinin nasıl kullanılacağını belirlemek için başvuru konusuna bakın.

Hizmet Davranışları

Aşağıdaki davranışlar hizmetler üzerinde çalışır.

Uç Nokta Davranışları

Aşağıdaki davranışlar uç noktalarda çalışır. Bu davranışların çoğu istemci uygulamalarında kullanılır.

  • CallbackBehaviorAttribute. Çift yönlü istemci uygulamasında geri çağırma hizmeti uygulamasını yapılandırıyor.

  • CallbackDebugBehavior. WCF geri çağırma nesnesi için hizmet hata ayıklamasını etkinleştirir.

  • ClientCredentials. Kullanıcının istemcide kullanılmak üzere istemci ve hizmet kimlik bilgilerinin yanı sıra hizmet kimlik bilgileri kimlik doğrulaması ayarlarını yapılandırmasına izin verir.

  • ClientViaBehavior. İstemciler tarafından aktarım kanalının oluşturulması gereken Tekdüzen Kaynak Tanımlayıcısı'nı (URI) belirtmek için kullanılır.

  • MustUnderstandBehavior. WCF'ye işlemeyi devre dışı bırakmasını emreder MustUnderstand .

  • SynchronousReceiveBehavior. Çalışma zamanına kanallar için zaman uyumlu bir alma işlemi kullanma talimatını gönderir.

  • TransactedBatchingBehavior. İşlem almalarını destekleyen aktarımlar için alma işlemlerini iyileştirir.

Sözleşme Davranışları

DeliveryRequirementsAttribute. Bağlamaların hizmete veya istemci uygulamasına sağlaması gereken özellik gereksinimlerini belirtir.

İşlem Davranışları

Aşağıdaki işlem davranışları, işlemler için serileştirme ve işlem denetimlerini belirtir.

Ayrıca bkz.