Nyelv

ServiceBehaviorAttribute Osztály

Definíció

A szolgáltatásszerződés végrehajtásának belső végrehajtási viselkedését határozza meg.

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
Öröklődés
ServiceBehaviorAttribute
Attribútumok
Megvalósítás

Példák

Az alábbi példakód a ServiceBehaviorAttribute tulajdonságokat mutatja be. Az BehaviorService osztály az ServiceBehaviorAttribute attribútummal jelzi, hogy:

  • A szolgáltatásobjektum a tranzakció befejeződésekor újra lesz hasznosítva.

  • Minden munkamenethez egy szolgáltatásobjektum tartozik.

  • A szolgáltatás egyszálas, és nem támogatja az újraküldéses hívásokat.

Emellett a művelet szintjén az OperationBehaviorAttribute értékek azt jelzik, hogy a metódus automatikusan bevonja a TxWork folyamatba a tranzakciókat, vagy létrehoz egy új tranzakciót a munka elvégzéséhez, és hogy a tranzakció automatikusan le lesz véglegesítve, ha nem kezelt kivétel nem történik meg.

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

A mögöttes kötésnek támogatnia kell a következő kód példájához tartozó tranzakciót a megfelelő végrehajtáshoz. Ha például egy kódban vagy egy alkalmazáskonfigurációs fájlban szeretné támogatni a WSHttpBindingtranzakciót, állítsa be a TransactionFlow tulajdonságot true kódban vagy alkalmazáskonfigurációs fájlban. Az alábbi példakód az előző minta konfigurációs fájlját mutatja be.

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

Megjegyzések

Alkalmazza az ServiceBehaviorAttribute attribútumot egy szolgáltatás-implementációra a szolgáltatásszintű végrehajtási viselkedés megadásához. (A végrehajtási viselkedés metódusszinten való megadásához használja az OperationBehaviorAttribute attribútumot.) Ez az attribútum csak szolgáltatás-implementációkra alkalmazható. A működő példákért tekintse meg a Szolgáltatás: Viselkedésminták című témakört.

ServiceBehaviorAttribute tulajdonságok egy Windows kommunikációs alaprendszer (WCF) programozási modell funkció, amely lehetővé teszi a fejlesztők által egyébként implementálandó általános funkciókat. Ezekről és egyéb viselkedésekről további információt a Szolgáltatás Run-Time viselkedésének megadása című témakörben talál. Az alábbi tulajdonságok némelyikének alapjául szolgáló futtatókörnyezeti tulajdonságokról további információt a ServiceHost kiterjesztése és a szolgáltatásmodell rétege című témakörben talál.

  • A AddressFilterMode tulajdonság azt a szűrőtípust határozza meg, amelyet a diszpécserrendszer a kérelmeket kezelő végpont megkereséséhez használ.

  • A AutomaticSessionShutdown tulajdonság automatikusan bezárja a munkamenetet a csatorna bezárásakor, és a szolgáltatás befejezte a fennmaradó üzenetek feldolgozását.

  • A ConcurrencyMode tulajdonság szabályozza a belső szálmodellt, amely lehetővé teszi az újraértelmezett vagy többszálú szolgáltatások támogatását.

  • A ConfigurationName tulajdonság a konfigurációs fájl elemének name attribútumában <service> használható név deklarálására szolgál.

  • A IgnoreExtensionDataObject tulajdonság lehetővé teszi, hogy a futási idő figyelmen kívül hagyja az üzenet feldolgozásához nem szükséges további szerializálási információkat.

  • A IncludeExceptionDetailInFaults tulajdonság azt határozza meg, hogy a szolgáltatás nem kezelt kivételeit a rendszer SOAP-hibaként adja-e vissza. Ez csak hibakeresési célokra szolgál.

  • A InstanceContextMode tulajdonság azt határozza meg, hogy a szolgáltatások és a szolgáltatásobjektumok újra felhasználhatók-e az ügyféllel folytatott csere során.

  • A MaxItemsInObjectGraph szerializált objektumgráfban lévő elemek számának korlátozására vonatkozó tulajdonság.

  • A Name tulajdonságok Namespace a szolgáltatáselem WSDL-kifejezésének nevét és névterét szabályozzák.

  • A ReleaseServiceInstanceOnTransactionComplete tulajdonság azt határozza meg, hogy a szolgáltatásobjektum újra lesz-e hasznosítva egy tranzakció befejezésekor.

  • A TransactionAutoCompleteOnSessionClose tulajdonság azt határozza meg, hogy a munkamenet bezárásakor befejeződnek-e a függőben lévő tranzakciók.

  • A TransactionIsolationLevel tulajdonság megadja a szerződés által támogatott tranzakcióelkülönítési szintet.

  • A TransactionTimeout tulajdonság azt az időtartamot adja meg, amelyen belül egy tranzakciónak befejeződnie kell, vagy megszakad.

  • A UseSynchronizationContext tulajdonság azt jelzi, hogy a bejövő metódushívások automatikusan szinkronizálhatók-e a felhasználói felület szálával.

  • A ValidateMustUnderstand tulajdonság tájékoztatja a rendszert arról, hogy meg kell-e erősítenie, hogy a SOAP-fejlécek MustUnderstand valójában értve lettek-e.

A IncludeExceptionDetailInFaults tulajdonság alkalmazáskonfigurációs fájllal is beállítható. További részletekért lásd: IncludeExceptionDetailInFaults.

Konstruktorok

Név Description
ServiceBehaviorAttribute()

Inicializálja a ServiceBehaviorAttribute osztály új példányát.

Tulajdonságok

Név Description
AddressFilterMode

Lekéri vagy beállítja a AddressFilterMode kézbesítő által a bejövő üzenetek megfelelő végpontra való átirányításához használt elemet.

AutomaticSessionShutdown

Megadja, hogy az ügyfél egy kimeneti munkamenet bezárásakor automatikusan bezárjon-e egy munkamenetet.

ConcurrencyMode

Lekérdezi vagy beállítja, hogy egy szolgáltatás támogat-e egy szálat, több szálat vagy újraküldéses hívásokat.

ConfigurationName

Lekéri vagy beállítja a szolgáltatáselem alkalmazáskonfigurációs fájlban való megkereséséhez használt értéket.

EnsureOrderedDispatch

Lekéri vagy beállít egy értéket, amely jelzi, hogy a megrendelt szolgáltatás kézbesítése biztosított-e.

IgnoreExtensionDataObject

Lekéri vagy beállít egy értéket, amely meghatározza, hogy ismeretlen szerializálási adatokat küldjön-e a vezetékre.

IncludeExceptionDetailInFaults

Lekéri vagy beállít egy értéket, amely meghatározza, hogy az általános nem kezelt végrehajtási kivételeket típussá FaultException<TDetail> kell konvertálniExceptionDetail, és hibaüzenetként kell elküldeni. Ezt csak a true fejlesztés során állítsa be egy szolgáltatás hibaelhárításához.

InstanceContextMode

Lekéri vagy beállítja az új szolgáltatásobjektumok létrehozásakor megjelenő értéket.

MaxItemsInObjectGraph

Lekéri vagy beállítja a szerializált objektumokban engedélyezett elemek maximális számát.

Name

Lekéri vagy beállítja a névattribútum értékét a Web Services Description Language (WSDL) szolgáltatáselemében.

Namespace

Lekéri vagy beállítja a szolgáltatás célnévterének értékét a Web Services Description Language (WSDL) nyelven.

ReleaseServiceInstanceOnTransactionComplete

Lekéri vagy beállít egy értéket, amely meghatározza, hogy a szolgáltatásobjektum felszabadul-e az aktuális tranzakció befejezésekor.

TransactionAutoCompleteOnSessionClose

Lekéri vagy beállít egy értéket, amely megadja, hogy a függőben lévő tranzakciók akkor fejeződnek-e be, amikor az aktuális munkamenet hiba nélkül bezárul.

TransactionIsolationLevel

Megadja a szolgáltatáson belül létrehozott új tranzakciók tranzakcióelkülönítési szintjét, valamint az ügyféltől érkező bejövő tranzakciókat.

TransactionTimeout

Lekéri vagy beállítja azt az időszakot, amelyen belül egy tranzakciónak végre kell hajtania.

TypeId

Ha származtatott osztályban implementálják, ehhez egy egyedi azonosítót Attributekap.

(Öröklődés forrása Attribute)
UseSynchronizationContext

Lekéri vagy beállít egy értéket, amely meghatározza, hogy az aktuális szinkronizálási környezetet használja-e a végrehajtási szál kiválasztásához.

ValidateMustUnderstand

Lekéri vagy beállít egy értéket, amely meghatározza, hogy a rendszer vagy az alkalmazás kényszeríti-e a SOAP MustUnderstand fejlécfeldolgozást.

Metódusok

Név Description
Equals(Object)

Olyan értéket ad vissza, amely jelzi, hogy ez a példány egyenlő-e egy adott objektummal.

(Öröklődés forrása Attribute)
GetHashCode()

A példány kivonatkódját adja vissza.

(Öröklődés forrása Attribute)
GetType()

Lekéri az Type aktuális példányt.

(Öröklődés forrása Object)
GetWellKnownSingleton()

Lekéri a szolgáltatást megvalósító és a szolgáltatás egyszeri példányaként használt objektumot, vagy null ha nincs egypéldányos példány.

IsDefaultAttribute()

Ha egy származtatott osztályban felül van bírálva, azt jelzi, hogy a példány értéke-e a származtatott osztály alapértelmezett értéke.

(Öröklődés forrása Attribute)
Match(Object)

Származtatott osztály felülírásakor egy olyan értéket ad vissza, amely jelzi, hogy ez a példány egy adott objektummal egyenlő-e.

(Öröklődés forrása Attribute)
MemberwiseClone()

Az aktuális Objectpéldány sekély másolatát hozza létre.

(Öröklődés forrása Object)
SetWellKnownSingleton(Object)

A szolgáltatást megvalósító és a szolgáltatás egyszeri példányaként használt objektumot adja meg.

ShouldSerializeConfigurationName()

Olyan értéket ad vissza, amely jelzi, hogy a tulajdonság megváltozott-e az ConfigurationName alapértelmezett értékétől, és szerializálni kell.

ShouldSerializeReleaseServiceInstanceOnTransactionComplete()

Olyan értéket ad vissza, amely jelzi, hogy a tulajdonság megváltozott-e az ReleaseServiceInstanceOnTransactionComplete alapértelmezett értékétől, és szerializálni kell.

ShouldSerializeTransactionAutoCompleteOnSessionClose()

Olyan értéket ad vissza, amely jelzi, hogy a tulajdonság megváltozott-e az TransactionAutoCompleteOnSessionClose alapértelmezett értékétől, és szerializálni kell.

ShouldSerializeTransactionIsolationLevel()

Olyan értéket ad vissza, amely jelzi, hogy a tulajdonság megváltozott-e az TransactionIsolationLevel alapértelmezett értékétől, és szerializálni kell.

ShouldSerializeTransactionTimeout()

Olyan értéket ad vissza, amely jelzi, hogy a tulajdonság megváltozott-e az TransactionTimeout alapértelmezett értékétől, és szerializálni kell.

ToString()

Az aktuális objektumot jelképező sztringet ad vissza.

(Öröklődés forrása Object)

Explicit interfész-implementációk

Név Description
_Attribute.GetIDsOfNames(Guid, IntPtr, UInt32, UInt32, IntPtr)

Névkészletet képez le a küldési azonosítók megfelelő készletére.

(Öröklődés forrása Attribute)
_Attribute.GetTypeInfo(UInt32, UInt32, IntPtr)

Lekéri egy objektum típusadatait, amelyek a felület típusadatainak lekérésére használhatók.

(Öröklődés forrása Attribute)
_Attribute.GetTypeInfoCount(UInt32)

Lekéri az objektumok által biztosított típusinformációs felületek számát (0 vagy 1).

(Öröklődés forrása Attribute)
_Attribute.Invoke(UInt32, Guid, UInt32, Int16, IntPtr, IntPtr, IntPtr, IntPtr)

Hozzáférést biztosít az objektumok által közzétett tulajdonságokhoz és metódusokhoz.

(Öröklődés forrása Attribute)
IServiceBehavior.AddBindingParameters(ServiceDescription, ServiceHostBase, Collection<ServiceEndpoint>, BindingParameterCollection)

Az egyéni adatobjektumokat átadja a viselkedési tulajdonságokat támogató kötéseknek.

IServiceBehavior.ApplyDispatchBehavior(ServiceDescription, ServiceHostBase)

Testre szabja a szolgáltatás futási idejét a viselkedési tulajdonságok támogatásához.

IServiceBehavior.Validate(ServiceDescription, ServiceHostBase)

Megerősíti, hogy a szolgáltatás leírása és a szolgáltatásgazda képes támogatni a viselkedést.

A következőre érvényes:

Lásd még