Exportar (0) Imprimir
Expandir todo

ServiceBehaviorAttribute (Clase)

Actualización: noviembre 2007

Especifica el comportamiento de ejecución interno de una implementación de contrato de servicio.

Espacio de nombres:  System.ServiceModel
Ensamblado:  System.ServiceModel (en System.ServiceModel.dll)

[AttributeUsageAttribute(AttributeTargets.Class)]
public sealed class ServiceBehaviorAttribute : Attribute, 
	IServiceBehavior
/** @attribute AttributeUsageAttribute(AttributeTargets.Class) */
public final class ServiceBehaviorAttribute extends Attribute implements IServiceBehavior
public final class ServiceBehaviorAttribute extends Attribute implements IServiceBehavior

Aplique el atributo ServiceBehaviorAttribute a una implementación del servicio para especificar el comportamiento de ejecución de todo el servicio. (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. Para obtener ejemplos prácticos, consulte Servicio: ejemplos de comportamientos.

Las propiedades ServiceBehaviorAttribute son una característica de modelo de programación Windows Communication Foundation (WCF) que habilita características comunes que, de otro modo, tendrían que implementar los programadores. Para obtener más información sobre estos y otros comportamientos, consulte Especificación del comportamiento en tiempo de ejecución del servicio. Para obtener más información sobre las propiedades en tiempo de ejecución subyacentes que establecen algunas de las propiedades siguientes, vea Extensión de ServiceHost y la capa de modelos de servicios.

  • La propiedad AddressFilterMode especifica el tipo de filtro que el sistema del distribuidor utiliza para buscar el extremo que administra las solicitudes.

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

  • La propiedad ConcurrencyMode controla el modelo de subprocesos interno, habilitando la compatibilidad para los servicios reentrantes o multiproceso.

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

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

  • La propiedad IncludeExceptionDetailInFaults especifica si las excepciones no controladas de un servicio se devuelven como errores SOAP. Esto se hace sólo con fines de depuración.

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

  • La propiedad MaxItemsInObjectGraph para limitar el número de elementos en un gráfico de objetos que se serializan.

  • Las propiedades Name y Namespace controlan el nombre y el espacio de nombres de la expresión WSDL del elemento de servicio.

  • La propiedad ReleaseServiceInstanceOnTransactionComplete especifica si el objeto de servicio se recicla cuando se completa una transacción.

  • La propiedad TransactionAutoCompleteOnSessionClose especifica si se completan las transacciones pendientes cuando la sesión se cierra.

  • La propiedad TransactionIsolationLevel especifica el nivel del aislamiento de transacción que el contrato admite.

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

  • La propiedad UseSynchronizationContext indica si sincronizar automáticamente las llamadas al método entrantes con el subproceso de la interfaz de usuario.

  • La propiedad ValidateMustUnderstand informa al sistema sobre si debe confirmar que los encabezados SOAP marcados como MustUnderstand han sido, de hecho, entendidos.

La propiedad IncludeExceptionDetailInFaults también se puede establecer mediante un archivo de configuración de aplicación. Para obtener información detallada, consulte IncludeExceptionDetailInFaults.

En el ejemplo de código siguiente se muestran las propiedades ServiceBehaviorAttribute. La clase BehaviorService utiliza el atributo ServiceBehaviorAttribute para indicar que:

  • Se recicla el objeto de servicio cuando se completa la transacción.

  • Hay un objeto de servicio para cada sesión.

  • La instancia del servicio es de subproceso único y no admite llamadas reentrantes.

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.

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."
      );
    }
  }
}


El enlace subyacente debe admitir transacciones de flujo para que el ejemplo de código siguiente se ejecute correctamente. 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. El ejemplo de código siguiente muestra el archivo de configuración para el ejemplo anterior:

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


System.Object
  System.Attribute
    System.ServiceModel.ServiceBehaviorAttribute

Todos los miembros static (Shared en Visual Basic) públicos de este tipo son seguros para la ejecución de subprocesos. No se garantiza que los miembros de instancias sean seguros para la ejecución de subprocesos.

Windows Vista, Windows XP SP2, Windows Server 2003

.NET Framework y .NET Compact Framework no admiten todas las versiones de cada plataforma. Para obtener una lista de las versiones compatibles, vea Requisitos de sistema de .NET Framework.

.NET Framework

Compatible con: 3.5, 3.0

Adiciones de comunidad

AGREGAR
Mostrar:
© 2014 Microsoft