ServiceBehaviorAttribute Kelas

Definisi

Menentukan perilaku eksekusi internal implementasi kontrak layanan.

public ref class ServiceBehaviorAttribute sealed : Attribute, System::ServiceModel::Description::IServiceBehavior
[System.AttributeUsage(System.AttributeTargets.Class)]
public sealed class ServiceBehaviorAttribute : Attribute, System.ServiceModel.Description.IServiceBehavior
[<System.AttributeUsage(System.AttributeTargets.Class)>]
type ServiceBehaviorAttribute = class
    inherit Attribute
    interface IServiceBehavior
Public NotInheritable Class ServiceBehaviorAttribute
Inherits Attribute
Implements IServiceBehavior
Warisan
ServiceBehaviorAttribute
Atribut
Penerapan

Contoh

Contoh kode berikut menunjukkan ServiceBehaviorAttribute properti. Kelas BehaviorService menggunakan ServiceBehaviorAttribute atribut untuk menunjukkan bahwa:

  • Objek layanan didaur ulang ketika transaksi selesai.

  • Ada satu objek layanan untuk setiap sesi.

  • Layanan ini berutas tunggal dan tidak mendukung panggilan masuk kembali.

Selain itu, pada tingkat operasi, OperationBehaviorAttribute nilai menunjukkan bahwa TxWork metode secara otomatis mendaftarkan transaksi yang dialirkan atau membuat transaksi baru untuk melakukan pekerjaan, dan bahwa transaksi dilakukan secara otomatis jika pengecualian yang tidak tertangani tidak terjadi.

using System;
using System.ServiceModel;
using System.Transactions;

namespace Microsoft.WCF.Documentation
{
  [ServiceContract(
    Namespace="http://microsoft.wcf.documentation",
    SessionMode=SessionMode.Required
  )]
  public interface IBehaviorService
  {
    [OperationContract]
    string TxWork(string message);
  }

  // Note: To use the TransactionIsolationLevel property, you
  // must add a reference to the System.Transactions.dll assembly.
  /* The following service implementation:
   *   -- Processes messages on one thread at a time
   *   -- Creates one service object per session
   *   -- Releases the service object when the transaction commits
   */
  [ServiceBehavior(
    ConcurrencyMode=ConcurrencyMode.Single,
    InstanceContextMode=InstanceContextMode.PerSession,
    ReleaseServiceInstanceOnTransactionComplete=true
  )]
  public class BehaviorService : IBehaviorService, IDisposable
  {
    Guid myID;

    public BehaviorService()
    {
      myID = Guid.NewGuid();
      Console.WriteLine(
        "Object "
        + myID.ToString()
        + " created.");
    }

    /*
     * The following operation-level behaviors are specified:
     *   -- The executing transaction is committed when
     *        the operation completes without an
     *        unhandled exception
     *   -- Always executes under a flowed transaction.
     */
    [OperationBehavior(
      TransactionAutoComplete = true,
      TransactionScopeRequired = true
    )]
    [TransactionFlow(TransactionFlowOption.Mandatory)]
    public string TxWork(string message)
    {
      // Do some transactable work.
      Console.WriteLine("TxWork called with: " + message);
      // Display transaction information.

      TransactionInformation info = Transaction.Current.TransactionInformation;
      Console.WriteLine("The distributed tx ID: {0}.", info.DistributedIdentifier);
      Console.WriteLine("The tx status: {0}.", info.Status);
      return String.Format("Hello. This was object {0}.",myID.ToString()) ;
    }

    public void Dispose()
    {
      Console.WriteLine(
        "Service "
        + myID.ToString()
        + " is being recycled."
      );
    }
  }
}
Imports System.ServiceModel
Imports System.Transactions

Namespace Microsoft.WCF.Documentation
  <ServiceContract(Namespace:="http://microsoft.wcf.documentation", SessionMode:=SessionMode.Required)> _
  Public Interface IBehaviorService
    <OperationContract> _
    Function TxWork(ByVal message As String) As String
  End Interface

  ' Note: To use the TransactionIsolationLevel property, you 
  ' must add a reference to the System.Transactions.dll assembly.
'   The following service implementation:
'   *   -- Processes messages on one thread at a time
'   *   -- Creates one service object per session
'   *   -- Releases the service object when the transaction commits
'   
    <ServiceBehavior(ConcurrencyMode:=ConcurrencyMode.Single, InstanceContextMode:=InstanceContextMode.PerSession, _
                     ReleaseServiceInstanceOnTransactionComplete:=True)> _
    Public Class BehaviorService
        Implements IBehaviorService, IDisposable
        Private myID As Guid

        Public Sub New()
            myID = Guid.NewGuid()
            Console.WriteLine("Object " & myID.ToString() & " created.")
        End Sub

        '    
        '     * The following operation-level behaviors are specified:
        '     *   -- The executing transaction is committed when
        '     *        the operation completes without an 
        '     *        unhandled exception
        '     *   -- Always executes under a flowed transaction.
        '     
        <OperationBehavior(TransactionAutoComplete:=True, TransactionScopeRequired:=True), TransactionFlow(TransactionFlowOption.Mandatory)> _
        Public Function TxWork(ByVal message As String) As String Implements IBehaviorService.TxWork
            ' Do some transactable work.
            Console.WriteLine("TxWork called with: " & message)
            ' Display transaction information.

            Dim info As TransactionInformation = Transaction.Current.TransactionInformation
            Console.WriteLine("The distributed tx ID: {0}.", info.DistributedIdentifier)
            Console.WriteLine("The tx status: {0}.", info.Status)
            Return String.Format("Hello. This was object {0}.", myID.ToString())
        End Function

        Public Sub Dispose() Implements IDisposable.Dispose
            Console.WriteLine("Service " & myID.ToString() & " is being recycled.")
        End Sub
    End Class
End Namespace

Pengikatan yang mendasar harus mendukung transaksi yang mengalir agar contoh kode berikut dapat dijalankan dengan benar. Untuk mendukung transaksi yang mengalir menggunakan WSHttpBinding, misalnya, atur TransactionFlow properti ke true dalam kode atau dalam file konfigurasi aplikasi. Contoh kode berikut menunjukkan file konfigurasi untuk sampel sebelumnya.

<configuration>
  <system.serviceModel>
    <services>
      <service  
        name="Microsoft.WCF.Documentation.BehaviorService" 
        behaviorConfiguration="metadataAndDebugEnabled"
      >
        <host>
          <baseAddresses>
            <add baseAddress="http://localhost:8080/SampleService"/>
          </baseAddresses>
        </host>
        <!--
          Note:
            This example code uses the WSHttpBinding to support transactions using the 
            WS-AtomicTransactions (WS-AT) protocol. WSHttpBinding is configured to use the  
            protocol, but the protocol is not enabled on some computers. Use the xws_reg -wsat+ 
            command to enable the WS-AtomicTransactions protocol in the MSDTC service.          
          -->
        <endpoint 
           contract="Microsoft.WCF.Documentation.IBehaviorService"
           binding="wsHttpBinding"
           bindingConfiguration="wsHttpBindingWithTXFlow"
           address="http://localhost:8080/BehaviorService"
          />
        <endpoint 
           contract="Microsoft.WCF.Documentation.IBehaviorService"
           binding="netTcpBinding"
           bindingConfiguration="netTcpBindingWithTXFlow"
           address="net.tcp://localhost:8081/BehaviorService"
          />
        <endpoint
          address="mex"
          binding="mexHttpBinding"
          contract="IMetadataExchange"
        />
      </service>
    </services>
    <behaviors>
      <serviceBehaviors>
        <behavior name="metadataAndDebugEnabled">
          <serviceDebug
            includeExceptionDetailInFaults="true"
          />
          <serviceMetadata
            httpGetEnabled="true"
            httpGetUrl=""
          />
        </behavior>
      </serviceBehaviors>
    </behaviors>
    <!-- binding configuration - configures a WSHttpBinding to require transaction flow -->
    <bindings>
      <wsHttpBinding>
        <binding name="wsHttpBindingWithTXFlow" transactionFlow="true" />
      </wsHttpBinding>
      <netTcpBinding>
        <binding name="netTcpBindingWithTXFlow" transactionFlow="true" />
      </netTcpBinding>
    </bindings>
  </system.serviceModel>
</configuration>

Keterangan

Terapkan atribut ke ServiceBehaviorAttribute implementasi layanan untuk menentukan perilaku eksekusi di seluruh layanan. (Untuk menentukan perilaku eksekusi pada tingkat metode, gunakan OperationBehaviorAttribute atribut .) Atribut ini hanya dapat diterapkan ke implementasi layanan. Untuk contoh kerja, lihat Sampel Layanan: Perilaku.

ServiceBehaviorAttribute properti adalah fitur model pemrograman Windows Communication Foundation (WCF) yang memungkinkan fitur umum yang harus diterapkan pengembang. Untuk informasi selengkapnya tentang perilaku ini dan perilaku lainnya, lihat Menentukan Perilaku Run-Time Layanan. Untuk informasi selengkapnya tentang properti runtime yang mendasari yang ditetapkan beberapa properti berikut, lihat Memperluas ServiceHost dan Lapisan Model Layanan.

  • Properti AddressFilterMode menentukan jenis filter yang digunakan sistem dispatcher untuk menemukan titik akhir yang menangani permintaan.

  • Properti AutomaticSessionShutdown secara otomatis menutup sesi ketika saluran ditutup dan layanan telah selesai memproses pesan yang tersisa.

  • Properti ConcurrencyMode mengontrol model utas internal, memungkinkan dukungan untuk layanan masuk kembali atau multithreaded.

  • Properti ConfigurationName digunakan untuk mendeklarasikan nama untuk digunakan dalam name atribut <service> elemen dalam file konfigurasi.

  • Properti IgnoreExtensionDataObject memungkinkan durasi untuk mengabaikan informasi serialisasi tambahan yang tidak diperlukan untuk memproses pesan.

  • Properti IncludeExceptionDetailInFaults menentukan apakah pengecualian yang tidak tertangani dalam layanan dikembalikan sebagai kesalahan SOAP. Ini hanya untuk tujuan penelusuran kesalahan.

  • Properti InstanceContextMode menentukan apakah dan kapan layanan dan objek layanannya akan didaur ulang selama pertukaran dengan klien.

  • MaxItemsInObjectGraph Properti untuk membatasi jumlah item dalam grafik objek yang diserialisasikan.

  • Properti Name dan Namespace mengontrol nama dan namespace layanan untuk ekspresi WSDL dari elemen layanan.

  • Properti ReleaseServiceInstanceOnTransactionComplete menentukan apakah objek layanan didaur ulang saat transaksi selesai.

  • Properti TransactionAutoCompleteOnSessionClose menentukan apakah transaksi yang belum selesai diselesaikan saat sesi ditutup.

  • Properti TransactionIsolationLevel menentukan tingkat isolasi transaksi yang didukung kontrak.

  • Properti TransactionTimeout menentukan periode waktu di mana transaksi harus selesai atau dibatalkan.

  • Properti UseSynchronizationContext menunjukkan apakah akan menyinkronkan panggilan metode masuk dengan utas antarmuka pengguna secara otomatis.

  • Properti ValidateMustUnderstand menginformasikan sistem apakah harus mengonfirmasi bahwa header SOAP yang ditandai sebagai MustUnderstand telah, pada kenyataannya, telah dipahami.

Properti IncludeExceptionDetailInFaults juga dapat diatur menggunakan file konfigurasi aplikasi. Untuk detailnya, lihat IncludeExceptionDetailInFaults.

Konstruktor

ServiceBehaviorAttribute()

Menginisialisasi instans baru kelas ServiceBehaviorAttribute.

Properti

AddressFilterMode

Mendapatkan atau mengatur AddressFilterMode yang digunakan oleh dispatcher untuk merutekan pesan masuk ke titik akhir yang benar.

AutomaticSessionShutdown

Menentukan apakah akan menutup sesi secara otomatis saat klien menutup sesi output.

ConcurrencyMode

Mendapatkan atau mengatur apakah layanan mendukung satu utas, beberapa utas, atau panggilan masuk kembali.

ConfigurationName

Mendapatkan atau mengatur nilai yang digunakan untuk menemukan elemen layanan dalam file konfigurasi aplikasi.

EnsureOrderedDispatch

Mendapatkan atau menetapkan nilai yang menunjukkan apakah pengiriman yang dipesan layanan dipastikan.

IgnoreExtensionDataObject

Mendapatkan atau menetapkan nilai yang menentukan apakah akan mengirim data serialisasi yang tidak diketahui ke kawat.

IncludeExceptionDetailInFaults

Mendapatkan atau menetapkan nilai yang menentukan bahwa pengecualian eksekusi umum yang tidak tertangani akan dikonversi menjadi FaultException<TDetail> jenis ExceptionDetail dan dikirim sebagai pesan kesalahan. Atur ini ke true hanya selama pengembangan untuk memecahkan masalah layanan.

InstanceContextMode

Mendapatkan atau mengatur nilai yang menunjukkan kapan objek layanan baru dibuat.

MaxItemsInObjectGraph

Mendapatkan atau mengatur jumlah maksimum item yang diizinkan dalam objek serial.

Name

Mendapatkan atau menetapkan nilai atribut nama dalam elemen layanan dalam Web Services Description Language (WSDL).

Namespace

Mendapatkan atau menetapkan nilai namespace layanan target untuk layanan dalam Web Services Description Language (WSDL).

ReleaseServiceInstanceOnTransactionComplete

Mendapatkan atau menetapkan nilai yang menentukan apakah objek layanan dirilis ketika transaksi saat ini selesai.

TransactionAutoCompleteOnSessionClose

Mendapatkan atau menetapkan nilai yang menentukan apakah transaksi yang tertunda selesai ketika sesi saat ini ditutup tanpa kesalahan.

TransactionIsolationLevel

Menentukan tingkat isolasi transaksi untuk transaksi baru yang dibuat di dalam layanan, dan transaksi masuk yang mengalir dari klien.

TransactionTimeout

Mendapatkan atau menetapkan periode di mana transaksi harus diselesaikan.

TypeId

Ketika diimplementasikan di kelas turunan, mendapatkan pengidentifikasi unik untuk ini Attribute.

(Diperoleh dari Attribute)
UseSynchronizationContext

Mendapatkan atau menetapkan nilai yang menentukan apakah akan menggunakan konteks sinkronisasi saat ini untuk memilih utas eksekusi.

ValidateMustUnderstand

Mendapatkan atau menetapkan nilai yang menentukan apakah sistem atau aplikasi memberlakukan pemrosesan header SOAP MustUnderstand .

Metode

Equals(Object)

Mengembalikan nilai yang menunjukkan apakah instans ini sama dengan objek tertentu.

(Diperoleh dari Attribute)
GetHashCode()

Mengembalikan kode hash untuk instans ini.

(Diperoleh dari Attribute)
GetType()

Mendapatkan instans Type saat ini.

(Diperoleh dari Object)
GetWellKnownSingleton()

Mengambil objek yang mengimplementasikan layanan dan yang digunakan sebagai instans singleton layanan, atau null jika tidak ada instans singleton.

IsDefaultAttribute()

Ketika ditimpa di kelas turunan, menunjukkan apakah nilai instans ini adalah nilai default untuk kelas turunan.

(Diperoleh dari Attribute)
Match(Object)

Saat ditimpa di kelas turunan, mengembalikan nilai yang menunjukkan apakah instans ini sama dengan objek tertentu.

(Diperoleh dari Attribute)
MemberwiseClone()

Membuat salinan dangkal dari yang saat ini Object.

(Diperoleh dari Object)
SetWellKnownSingleton(Object)

Menentukan objek yang mengimplementasikan layanan dan yang digunakan sebagai instans singleton layanan.

ShouldSerializeConfigurationName()

Mengembalikan nilai yang menunjukkan apakah ConfigurationName properti telah berubah dari nilai defaultnya dan harus diserialisasikan.

ShouldSerializeReleaseServiceInstanceOnTransactionComplete()

Mengembalikan nilai yang menunjukkan apakah ReleaseServiceInstanceOnTransactionComplete properti telah berubah dari nilai defaultnya dan harus diserialisasikan.

ShouldSerializeTransactionAutoCompleteOnSessionClose()

Mengembalikan nilai yang menunjukkan apakah TransactionAutoCompleteOnSessionClose properti telah berubah dari nilai defaultnya dan harus diserialisasikan.

ShouldSerializeTransactionIsolationLevel()

Mengembalikan nilai yang menunjukkan apakah TransactionIsolationLevel properti telah berubah dari nilai defaultnya dan harus diserialisasikan.

ShouldSerializeTransactionTimeout()

Mengembalikan nilai yang menunjukkan apakah TransactionTimeout properti telah berubah dari nilai defaultnya dan harus diserialisasikan.

ToString()

Mengembalikan string yang mewakili objek saat ini.

(Diperoleh dari Object)

Implementasi Antarmuka Eksplisit

_Attribute.GetIDsOfNames(Guid, IntPtr, UInt32, UInt32, IntPtr)

Memetakan sekumpulan nama ke sekumpulan pengidentifikasi pengiriman yang sesuai.

(Diperoleh dari Attribute)
_Attribute.GetTypeInfo(UInt32, UInt32, IntPtr)

Mengambil informasi jenis untuk objek, yang dapat digunakan untuk mendapatkan informasi jenis untuk antarmuka.

(Diperoleh dari Attribute)
_Attribute.GetTypeInfoCount(UInt32)

Mengambil jumlah antarmuka informasi jenis yang disediakan objek (baik 0 atau 1).

(Diperoleh dari Attribute)
_Attribute.Invoke(UInt32, Guid, UInt32, Int16, IntPtr, IntPtr, IntPtr, IntPtr)

Menyediakan akses ke properti dan metode yang diekspos oleh objek.

(Diperoleh dari Attribute)
IServiceBehavior.AddBindingParameters(ServiceDescription, ServiceHostBase, Collection<ServiceEndpoint>, BindingParameterCollection)

Meneruskan objek data kustom ke pengikatan yang mendukung properti perilaku.

IServiceBehavior.ApplyDispatchBehavior(ServiceDescription, ServiceHostBase)

Menyesuaikan durasi layanan untuk mendukung properti perilaku.

IServiceBehavior.Validate(ServiceDescription, ServiceHostBase)

Mengonfirmasi bahwa deskripsi layanan dan host layanan mampu mendukung perilaku.

Berlaku untuk

Lihat juga