Sdílet prostřednictvím


ServiceBehaviorAttribute Třída

Definice

Určuje interní chování provádění implementace kontraktu služby.

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
Dědičnost
ServiceBehaviorAttribute
Atributy
Implementuje

Příklady

Následující příklad kódu ukazuje ServiceBehaviorAttribute vlastnosti. Třída BehaviorService používá atribut k ServiceBehaviorAttribute označení, že:

  • Objekt služby se po dokončení transakce recykluje.

  • Pro každou relaci existuje jeden objekt služby.

  • Služba je jednovláknová a nepodporuje opakované volání.

Dále na úrovni operace hodnoty označují, OperationBehaviorAttribute že TxWork metoda automaticky zapisuje do toku transakcí nebo vytvoří novou transakci pro provedení práce a že transakce je potvrzena automaticky, pokud nedojde k neošetřené výjimce.

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

Podkladová vazba musí podporovat tokované transakce, aby se následující příklad kódu správně spustil. Pokud chcete podporovat tokované transakce pomocí WSHttpBinding, například nastavte TransactionFlow vlastnost na true v kódu nebo v konfiguračním souboru aplikace. Následující příklad kódu ukazuje konfigurační soubor pro předchozí ukázku.

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

Poznámky

ServiceBehaviorAttribute Použijte atribut na implementaci služby a určete chování provádění v rámci celé služby. (Pokud chcete určit chování provádění na úrovni metody, použijte OperationBehaviorAttribute atribut .) Tento atribut lze použít pouze pro implementace služby. Pracovní příklady najdete v tématu Service: Behaviors Samples (Služba: Ukázky chování).

ServiceBehaviorAttribute vlastnosti jsou funkce programovacího modelu technologie Windows Communication Foundation (WCF), která umožňuje běžné funkce, které vývojáři jinak musí implementovat. Další informace o tomto a dalších chováních najdete v tématu Určení chování služby Run-Time. Další informace o základních vlastnostech modulu runtime, které některé z následujících vlastností nastavily, najdete v tématu Rozšíření servicehost a vrstvy modelu služby.

  • Vlastnost AddressFilterMode určuje typ filtru, který systém dispečera používá k vyhledání koncového bodu, který zpracovává požadavky.

  • Vlastnost AutomaticSessionShutdown automaticky zavře relaci, když je kanál zavřený a služba dokončila zpracování všech zbývajících zpráv.

  • Vlastnost ConcurrencyMode řídí interní model threadingu, což umožňuje podporu pro služby s více vlákny nebo reentrant.

  • Vlastnost ConfigurationName slouží k deklaraci názvu pro použití v atributu name elementu <service> v konfiguračním souboru.

  • Vlastnost IgnoreExtensionDataObject umožňuje za běhu ignorovat extra serializační informace, které nejsou nutné ke zpracování zprávy.

  • Vlastnost IncludeExceptionDetailInFaults určuje, zda jsou neošetřené výjimky ve službě vráceny jako chyby PROTOKOLU SOAP. To je jenom pro účely ladění.

  • Vlastnost InstanceContextMode určuje, zda a kdy mají být služby a jejich objekty služby recyklovány během výměny s klientem.

  • Vlastnost MaxItemsInObjectGraph , která má omezit počet položek v grafu objektů, které jsou serializovány.

  • Vlastnosti Name a Namespace řídí název a obor názvů výrazu WSDL elementu služby.

  • Vlastnost ReleaseServiceInstanceOnTransactionComplete určuje, zda objekt služby je recyklován po dokončení transakce.

  • Vlastnost TransactionAutoCompleteOnSessionClose určuje, zda jsou při ukončení relace dokončeny nevyřízené transakce.

  • Vlastnost TransactionIsolationLevel určuje úroveň izolace transakce, kterou kontrakt podporuje.

  • Vlastnost TransactionTimeout určuje časové období, během kterého se musí transakce dokončit nebo se přeruší.

  • Vlastnost UseSynchronizationContext určuje, jestli se mají automaticky synchronizovat příchozí volání metody s vláknem uživatelského rozhraní.

  • Vlastnost ValidateMustUnderstand informuje systém, zda má potvrdit, že hlavičky SOAP označené jako MustUnderstand byly ve skutečnosti pochopeny.

Vlastnost IncludeExceptionDetailInFaults lze také nastavit pomocí konfiguračního souboru aplikace. Podrobnosti najdete v tématu IncludeExceptionDetailInFaults.

Konstruktory

ServiceBehaviorAttribute()

Inicializuje novou instanci ServiceBehaviorAttribute třídy.

Vlastnosti

AddressFilterMode

Získá nebo nastaví AddressFilterMode , který se používá dispečer směrovat příchozí zprávy do správného koncového bodu.

AutomaticSessionShutdown

Určuje, jestli se má automaticky zavřít relace, když klient zavře výstupní relaci.

ConcurrencyMode

Získá nebo nastaví, zda služba podporuje jedno vlákno, více vláken nebo opakované volání.

ConfigurationName

Získá nebo nastaví hodnotu použitou k vyhledání elementu služby v konfiguračním souboru aplikace.

EnsureOrderedDispatch

Získá nebo nastaví hodnotu, která označuje, zda je zajištěna služba objednaného odeslání.

IgnoreExtensionDataObject

Získá nebo nastaví hodnotu, která určuje, zda odeslat neznámé serializace data na drát.

IncludeExceptionDetailInFaults

Získá nebo nastaví hodnotu, která určuje, že obecné neošetřené výjimky spuštění mají být převedeny na FaultException<TDetail> typ ExceptionDetail a odeslány jako chybová zpráva. Při řešení potíží se službou nastavte tuto hodnotu true pouze během vývoje.

InstanceContextMode

Získá nebo nastaví hodnotu, která označuje, kdy jsou vytvořeny nové objekty služby.

MaxItemsInObjectGraph

Získá nebo nastaví maximální počet položek povolených v serializovaném objektu.

Name

Získá nebo nastaví hodnotu atributu name v elementu služby v jazyce WSDL (Web Services Description Language).

Namespace

Získá nebo nastaví hodnotu cílového oboru názvů pro službu v jazyce WSDL (Web Services Description Language).

ReleaseServiceInstanceOnTransactionComplete

Získá nebo nastaví hodnotu, která určuje, zda objekt služby je uvolněn při aktuální transakce dokončena.

TransactionAutoCompleteOnSessionClose

Získá nebo nastaví hodnotu, která určuje, zda čekající transakce jsou dokončeny při aktuální relaci zavře bez chyby.

TransactionIsolationLevel

Určuje úroveň izolace transakcí pro nové transakce vytvořené uvnitř služby a příchozí transakce tokované z klienta.

TransactionTimeout

Získá nebo nastaví období, ve kterém musí transakce dokončit.

TypeId

Při implementaci v odvozené třídě získá jedinečný identifikátor pro tuto Attributetřídu .

(Zděděno od Attribute)
UseSynchronizationContext

Získá nebo nastaví hodnotu, která určuje, zda použít aktuální synchronizační kontext zvolit vlákno provádění.

ValidateMustUnderstand

Získá nebo nastaví hodnotu, která určuje, zda systém nebo aplikace vynucuje zpracování hlavičky SOAP MustUnderstand .

Metody

Equals(Object)

Vrací hodnotu, která určuje, zda je tato instance rovna zadanému objektu.

(Zděděno od Attribute)
GetHashCode()

Vrátí hodnotu hash pro tuto instanci.

(Zděděno od Attribute)
GetType()

Získá aktuální Type instanci.

(Zděděno od Object)
GetWellKnownSingleton()

Načte objekt, který implementuje službu a který se používá jako samostatná instance služby, nebo null pokud neexistuje žádná instance typu singleton.

IsDefaultAttribute()

Při přepsání v odvozené třídě označuje, zda je hodnota této instance výchozí hodnotou pro odvozenou třídu.

(Zděděno od Attribute)
Match(Object)

Při přepsání v odvozené třídě vrátí hodnotu, která označuje, zda se tato instance rovná zadanému objektu.

(Zděděno od Attribute)
MemberwiseClone()

Vytvoří mělkou kopii aktuálního Objectsouboru .

(Zděděno od Object)
SetWellKnownSingleton(Object)

Určuje objekt, který implementuje službu a který se používá jako samostatná instance služby.

ShouldSerializeConfigurationName()

Vrátí hodnotu, která označuje, zda ConfigurationName se vlastnost změnila od výchozí hodnoty a měla by být serializována.

ShouldSerializeReleaseServiceInstanceOnTransactionComplete()

Vrátí hodnotu, která označuje, zda ReleaseServiceInstanceOnTransactionComplete se vlastnost změnila od výchozí hodnoty a měla by být serializována.

ShouldSerializeTransactionAutoCompleteOnSessionClose()

Vrátí hodnotu, která označuje, zda TransactionAutoCompleteOnSessionClose se vlastnost změnila od výchozí hodnoty a měla by být serializována.

ShouldSerializeTransactionIsolationLevel()

Vrátí hodnotu, která označuje, zda TransactionIsolationLevel se vlastnost změnila od výchozí hodnoty a měla by být serializována.

ShouldSerializeTransactionTimeout()

Vrátí hodnotu, která označuje, zda TransactionTimeout se vlastnost změnila od výchozí hodnoty a měla by být serializována.

ToString()

Vrátí řetězec, který představuje aktuální objekt.

(Zděděno od Object)

Explicitní implementace rozhraní

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

Mapuje sadu názvů na odpovídající sadu identifikátorů pro rozesílání.

(Zděděno od Attribute)
_Attribute.GetTypeInfo(UInt32, UInt32, IntPtr)

Načte informace o typu objektu, které lze použít k získání informací o typu pro rozhraní.

(Zděděno od Attribute)
_Attribute.GetTypeInfoCount(UInt32)

Získá počet rozhraní typu informací, které objekt poskytuje (0 nebo 1).

(Zděděno od Attribute)
_Attribute.Invoke(UInt32, Guid, UInt32, Int16, IntPtr, IntPtr, IntPtr, IntPtr)

Poskytuje přístup k vlastnostem a metodám vystaveným objektem.

(Zděděno od Attribute)
IServiceBehavior.AddBindingParameters(ServiceDescription, ServiceHostBase, Collection<ServiceEndpoint>, BindingParameterCollection)

Předává vlastní datové objekty vazbám, které podporují vlastnosti chování.

IServiceBehavior.ApplyDispatchBehavior(ServiceDescription, ServiceHostBase)

Přizpůsobí dobu spuštění služby tak, aby podporovala vlastnosti chování.

IServiceBehavior.Validate(ServiceDescription, ServiceHostBase)

Potvrdí, že popis služby a hostitel služby jsou schopni podporovat chování.

Platí pro

Viz také