ServiceBehaviorAttribute Clase

Definición

Especifica el comportamiento de ejecución interno de una implementación de contrato de servicio.Specifies the internal execution behavior of a service contract implementation.

public ref class ServiceBehaviorAttribute sealed : Attribute, System::ServiceModel::Description::IServiceBehavior
[System.AttributeUsage(System.AttributeTargets.Class)]
public sealed class ServiceBehaviorAttribute : Attribute, System.ServiceModel.Description.IServiceBehavior
type ServiceBehaviorAttribute = class
    inherit Attribute
    interface IServiceBehavior
Public NotInheritable Class ServiceBehaviorAttribute
Inherits Attribute
Implements IServiceBehavior
Herencia
ServiceBehaviorAttribute
Atributos
Implementaciones

Ejemplos

En el ejemplo de código siguiente se muestran las propiedades ServiceBehaviorAttribute.The following code example demonstrates the ServiceBehaviorAttribute properties. La clase BehaviorService utiliza el atributo ServiceBehaviorAttribute para indicar que:The BehaviorService class uses the ServiceBehaviorAttribute attribute to indicate that:

  • Se recicla el objeto de servicio cuando se completa la transacción.The service object is recycled when the transaction completes.

  • Hay un objeto de servicio para cada sesión.There is one service object for each session.

  • La instancia del servicio es de subproceso único y no admite llamadas reentrantes.The service is single-threaded and does not support reentrant calls.

Además, en el nivel de la operación, los valores OperationBehaviorAttribute indican que el método TxWork da de alta automáticamente las transacciones de flujo o crea una transacción nueva para hacer el trabajo y que se confirma la transacción automáticamente si no se produce una excepción no controlada.Furthermore, at the operation level, the OperationBehaviorAttribute values indicate that the TxWork method automatically enlists in flowed transactions or creates a new transaction to do the work, and that the transaction is committed automatically if an unhandled exception does not occur.

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

El enlace subyacente debe admitir transacciones de flujo para que el ejemplo de código siguiente se ejecute correctamente.The underlying binding must support flowed transactions for the following code example to execute properly. Para admitir transacciones de flujo con WSHttpBinding, por ejemplo, establezca la propiedad TransactionFlow como true en el código o en un archivo de configuración de la aplicación.To support flowed transactions using the WSHttpBinding, for example, set the TransactionFlow property to true in code or in an application configuration file. El ejemplo de código siguiente muestra el archivo de configuración para el ejemplo anterior:The following code example shows the configuration file for the preceding sample.

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

Comentarios

Aplique el atributo ServiceBehaviorAttribute a una implementación del servicio para especificar el comportamiento de ejecución de todo el servicio.Apply the ServiceBehaviorAttribute attribute to a service implementation to specify service-wide execution behavior. (Para especificar el comportamiento de ejecución en el nivel de método, utilice el atributo OperationBehaviorAttribute.) Este atributo sólo se puede aplicar a las implementaciones de servicio.(To specify execution behavior at the method level, use the OperationBehaviorAttribute attribute.) This attribute can be applied only to service implementations. Para obtener ejemplos prácticos, vea el servicio: Ejemplosde comportamientos.For working examples, see the Service: Behaviors Samples.

ServiceBehaviorAttributelas propiedades son una característica del modelo de programación de Windows Communication Foundation (WCF) que habilita las características comunes que los desarrolladores tienen que implementar.ServiceBehaviorAttribute properties are a Windows Communication Foundation (WCF) programming model feature that enables common features that developers otherwise have to implement. Para obtener más información sobre estos y otros comportamientos, vea especificar el comportamiento de tiempo de ejecución del servicio.For more information about these and other behaviors, see Specifying Service Run-Time Behavior. Para obtener más información acerca de las propiedades de tiempo de ejecución subyacentes que se establecen en algunas de las propiedades siguientes, vea extender ServiceHost y el nivel de modelo de servicio.For more information about the underlying runtime properties that some of the following properties set, see Extending ServiceHost and the Service Model Layer.

  • La propiedad AddressFilterMode especifica el tipo de filtro que el sistema del distribuidor utiliza para buscar el punto de conexión que administra las solicitudes.The AddressFilterMode property specifies the type of filter that the dispatcher system uses to locate the endpoint that handles requests.

  • La propiedad AutomaticSessionShutdown cierra automáticamente la sesión cuando se cierra el canal y el servicio ha acabado de procesar todos los mensajes restantes.The AutomaticSessionShutdown property automatically closes the session when the channel is closed and the service has finished processing any remaining messages.

  • La propiedad ConcurrencyMode controla el modelo de subprocesos interno, habilitando la compatibilidad para los servicios reentrantes o multiproceso.The ConcurrencyMode property controls the internal threading model, enabling support for reentrant or multithreaded services.

  • La propiedad ConfigurationName se utiliza para declarar un nombre para su utilización en el atributo name del elemento <service> en un archivo de configuración.The ConfigurationName property is used to declare a name for use in the name attribute of the <service> element in a configuration file.

  • La propiedad IgnoreExtensionDataObject permite que el tiempo de ejecución omita información de serialización adicional que no se exige para procesar el mensaje.The IgnoreExtensionDataObject property enables the run time to ignore extra serialization information that is not required to process the message.

  • La propiedad IncludeExceptionDetailInFaults especifica si las excepciones no controladas de un servicio se devuelven como errores SOAP.The IncludeExceptionDetailInFaults property specifies whether unhandled exceptions in a service are returned as SOAP faults. Esto se hace sólo con fines de depuración.This is for debugging purposes only.

  • La propiedad InstanceContextMode especifica si los servicios y sus objetos de servicio serán reciclados durante un intercambio con un cliente y cuándo lo serán.The InstanceContextMode property specifies whether and when services and their service objects are to be recycled during an exchange with a client.

  • La propiedad MaxItemsInObjectGraph para limitar el número de elementos en un gráfico de objetos que se serializan.The MaxItemsInObjectGraph property to limit on the number of items in an object graph that are serialized.

  • Las propiedades Name y Namespace controlan el nombre y el espacio de nombres de la expresión WSDL del elemento de servicio.The Name and Namespace properties control the name and namespace for the WSDL expression of the service element.

  • La propiedad ReleaseServiceInstanceOnTransactionComplete especifica si el objeto de servicio se recicla cuando se completa una transacción.The ReleaseServiceInstanceOnTransactionComplete property specifies whether the service object is recycled when a transaction completes.

  • La propiedad TransactionAutoCompleteOnSessionClose especifica si se completan las transacciones pendientes cuando la sesión se cierra.The TransactionAutoCompleteOnSessionClose property specifies whether outstanding transactions are completed when the session closes.

  • La propiedad TransactionIsolationLevel especifica el nivel del aislamiento de transacción que el contrato admite.The TransactionIsolationLevel property specifies the transaction isolation level that the contract supports.

  • La propiedad TransactionTimeout especifica el período de tiempo dentro del que una nueva transacción creada en el servicio debe completarse o se anula.The TransactionTimeout property specifies the time period within which a transaction must complete or it aborts.

  • La propiedad UseSynchronizationContext indica si sincronizar automáticamente las llamadas al método entrantes con el subproceso de la interfaz de usuario.The UseSynchronizationContext property indicates whether to synchronize inbound method calls with the user interface thread automatically.

  • La propiedad ValidateMustUnderstand informa al sistema sobre si debe confirmar que los encabezados SOAP marcados como MustUnderstand han sido, de hecho, entendidos.The ValidateMustUnderstand property informs the system whether it should confirm that SOAP headers marked as MustUnderstand have, in fact, been understood.

La propiedad IncludeExceptionDetailInFaults también se puede establecer mediante un archivo de configuración de aplicación.The IncludeExceptionDetailInFaults property can also be set using an application configuration file. Para obtener información detallada, vea IncludeExceptionDetailInFaults.For details, see IncludeExceptionDetailInFaults.

Constructores

ServiceBehaviorAttribute()

Inicializa una nueva instancia de la clase ServiceBehaviorAttribute.Initializes a new instance of the ServiceBehaviorAttribute class.

Propiedades

AddressFilterMode

Obtiene o establece el AddressFilterMode utilizado por el distribuidor para enrutar los mensajes entrantes al punto final correcto.Gets or sets the AddressFilterMode that is used by the dispatcher to route incoming messages to the correct endpoint.

AutomaticSessionShutdown

Especifica si cerrar automáticamente una sesión cuando un cliente cierra una sesión de salida.Specifies whether to automatically close a session when a client closes an output session.

ConcurrencyMode

Obtiene o establece si un servicio admite un subproceso, varios subprocesos o llamadas reentrantes.Gets or sets whether a service supports one thread, multiple threads, or reentrant calls.

ConfigurationName

Obtiene o establece el valor utilizado para buscar el elemento de servicio en un archivo de configuración de la aplicación.Gets or sets the value used to locate the service element in an application configuration file.

EnsureOrderedDispatch

Obtiene o establece un valor que indica si se garantiza el envío solicitado de servicio.Gets or sets a value that indicates whether the service ordered dispatch is ensured.

IgnoreExtensionDataObject

Obtiene o establece un valor que especifica si enviar o no datos de serialización desconocidos hacia la conexión.Gets or sets a value that specifies whether to send unknown serialization data onto the wire.

IncludeExceptionDetailInFaults

Obtiene o establece un valor que especifica que las excepciones de ejecución generales no controladas se convertirán en una FaultException<TDetail> de tipo ExceptionDetail, y se enviarán como mensaje de error.Gets or sets a value that specifies that general unhandled execution exceptions are to be converted into a FaultException<TDetail> of type ExceptionDetail and sent as a fault message. Establezca este valor como true sólo durante el desarrollo para solucionar problemas de un servicio.Set this to true only during development to troubleshoot a service.

InstanceContextMode

Obtiene o establece el valor que indica cuándo se crean los nuevos objetos de servicio.Gets or sets the value that indicates when new service objects are created.

MaxItemsInObjectGraph

Obtiene o establece el número máximo de elementos permitido en un objeto serializado.Gets or sets the maximum number of items allowed in a serialized object.

Name

Obtiene o establece el valor del atributo de nombre del elemento de servicio en el lenguaje de descripción de servicios Web (WSDL).Gets or sets the value of the name attribute in the service element in Web Services Description Language (WSDL).

Namespace

Obtiene o establece el valor del espacio de nombres de destino del servicio en el lenguaje de descripción de servicios Web (WSDL).Gets or sets the value of the target namespace for the service in Web Services Description Language (WSDL).

ReleaseServiceInstanceOnTransactionComplete

Obtiene o establece un valor que especifica si se libera el objeto de servicio cuando se completa la transacción actual.Gets or sets a value that specifies whether the service object is released when the current transaction completes.

TransactionAutoCompleteOnSessionClose

Obtiene o establece un valor que especifica si se completan las transacciones pendientes cuando la sesión actual se cierra sin error.Gets or sets a value that specifies whether pending transactions are completed when the current session closes without error.

TransactionIsolationLevel

Especifica el nivel de aislamiento de transacción para las nuevas transacciones creadas dentro del servicio y las transacciones entrantes que han fluido desde un cliente.Specifies the transaction isolation level for new transactions created inside the service, and incoming transactions flowed from a client.

TransactionTimeout

Obtiene o establece el período dentro del que una transacción se debe completar.Gets or sets the period within which a transaction must complete.

TypeId

Cuando se implementa en una clase derivada, obtiene un identificador único para este Attribute.When implemented in a derived class, gets a unique identifier for this Attribute.

(Heredado de Attribute)
UseSynchronizationContext

Obtiene o establece un valor que especifica si utilizar el contexto de sincronización actual para elegir el subproceso de ejecución.Gets or sets a value that specifies whether to use the current synchronization context to choose the thread of execution.

ValidateMustUnderstand

Obtiene o establece un valor que especifica si el sistema o la aplicación exige el procesamiento de encabezados MustUnderstand de SOAP.Gets or sets a value that specifies whether the system or the application enforces SOAP MustUnderstand header processing.

Métodos

Equals(Object)

Devuelve un valor que indica si esta instancia es igual que un objeto especificado.Returns a value that indicates whether this instance is equal to a specified object.

(Heredado de Attribute)
GetHashCode()

Devuelve el código hash de esta instancia.Returns the hash code for this instance.

(Heredado de Attribute)
GetType()

Obtiene el Type de la instancia actual.Gets the Type of the current instance.

(Heredado de Object)
GetWellKnownSingleton()

Recupera un objeto que implementa el servicio y que se utiliza como instancia singleton del servicio o null si no hay ninguna instancia singleton.Retrieves an object that implements the service and that is used as the singleton instance of the service, or null if there is no singleton instance.

IsDefaultAttribute()

Si se reemplaza en una clase derivada, indica si el valor de esta instancia es el valor predeterminado de la clase derivada.When overridden in a derived class, indicates whether the value of this instance is the default value for the derived class.

(Heredado de Attribute)
Match(Object)

Cuando se invalida en una clase derivada, devuelve un valor que indica si esta instancia es igual a un objeto especificado.When overridden in a derived class, returns a value that indicates whether this instance equals a specified object.

(Heredado de Attribute)
MemberwiseClone()

Crea una copia superficial del objeto Object actual.Creates a shallow copy of the current Object.

(Heredado de Object)
SetWellKnownSingleton(Object)

Especifica un objeto que implementa el servicio y que se utiliza como instancia singleton del servicio.Specifies an object that implements the service and that is used as the singleton instance of the service.

ShouldSerializeConfigurationName()

Devuelve un valor que indica si la propiedad ConfigurationName ha cambiado respecto de su valor predeterminado y se debe serializar.Returns a value that indicates whether the ConfigurationName property has changed from its default value and should be serialized.

ShouldSerializeReleaseServiceInstanceOnTransactionComplete()

Devuelve un valor que indica si la propiedad ReleaseServiceInstanceOnTransactionComplete ha cambiado respecto de su valor predeterminado y se debe serializar.Returns a value that indicates whether the ReleaseServiceInstanceOnTransactionComplete property has changed from its default value and should be serialized.

ShouldSerializeTransactionAutoCompleteOnSessionClose()

Devuelve un valor que indica si la propiedad TransactionAutoCompleteOnSessionClose ha cambiado respecto de su valor predeterminado y se debe serializar.Returns a value that indicates whether the TransactionAutoCompleteOnSessionClose property has changed from its default value and should be serialized.

ShouldSerializeTransactionIsolationLevel()

Devuelve un valor que indica si la propiedad TransactionIsolationLevel ha cambiado respecto de su valor predeterminado y se debe serializar.Returns a value that indicates whether the TransactionIsolationLevel property has changed from its default value and should be serialized.

ShouldSerializeTransactionTimeout()

Devuelve un valor que indica si la propiedad TransactionTimeout ha cambiado respecto de su valor predeterminado y se debe serializar.Returns a value that indicates whether the TransactionTimeout property has changed from its default value and should be serialized.

ToString()

Devuelve una cadena que representa el objeto actual.Returns a string that represents the current object.

(Heredado de Object)

Implementaciones de interfaz explícitas

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

Asigna un conjunto de nombres a un conjunto correspondiente de identificadores de envío.Maps a set of names to a corresponding set of dispatch identifiers.

(Heredado de Attribute)
_Attribute.GetTypeInfo(UInt32, UInt32, IntPtr)

Obtiene la información de tipos de un objeto, que puede utilizarse para obtener la información de tipos de una interfaz.Retrieves the type information for an object, which can be used to get the type information for an interface.

(Heredado de Attribute)
_Attribute.GetTypeInfoCount(UInt32)

Recupera el número de interfaces de información de tipo que proporciona un objeto (0 ó 1).Retrieves the number of type information interfaces that an object provides (either 0 or 1).

(Heredado de Attribute)
_Attribute.Invoke(UInt32, Guid, UInt32, Int16, IntPtr, IntPtr, IntPtr, IntPtr)

Proporciona acceso a las propiedades y los métodos expuestos por un objeto.Provides access to properties and methods exposed by an object.

(Heredado de Attribute)
IServiceBehavior.AddBindingParameters(ServiceDescription, ServiceHostBase, Collection<ServiceEndpoint>, BindingParameterCollection)

Pasa objetos de datos personalizados a los enlaces que admiten las propiedades de comportamiento.Passes custom data objects to the bindings that support the behavior properties.

IServiceBehavior.ApplyDispatchBehavior(ServiceDescription, ServiceHostBase)

Personaliza el tiempo de ejecución del servicio para admitir las propiedades de comportamiento.Customizes the service run time to support the behavior properties.

IServiceBehavior.Validate(ServiceDescription, ServiceHostBase)

Confirma que la descripción del servicio y el host de servicio son capaces de admitir el comportamiento.Confirms that the service description and service host are capable of supporting the behavior.

Se aplica a

Consulte también: