ServiceBehaviorAttribute Clase
Definición
Importante
Parte de la información hace referencia a la versión preliminar del producto, que puede haberse modificado sustancialmente antes de lanzar la versión definitiva. Microsoft no otorga ninguna garantía, explícita o implícita, con respecto a la información proporcionada aquí.
Especifica el comportamiento de ejecución interno de una implementación de contrato de servicio.
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
- Herencia
- Atributos
- Implementaciones
Ejemplos
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."
);
}
}
}
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. 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"
/>
<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. (Para especificar el comportamiento de ejecución en el nivel de método, use el OperationBehaviorAttribute atributo ). Este atributo solo se puede aplicar a las implementaciones de servicio. Para ver ejemplos de trabajo, consulte Los ejemplos de servicios: comportamientos.
ServiceBehaviorAttribute las propiedades son una característica de modelo de programación de Windows Communication Foundation (WCF) que permite características comunes que los desarrolladores de otro modo tienen que implementar. Para obtener más información sobre estos y otros comportamientos, consulte Especificación del comportamiento de Service Run-Time. Para obtener más información sobre las propiedades subyacentes del entorno de ejecución que se establecen algunas de las propiedades siguientes, vea Extensión de ServiceHost y capa de modelo de servicio.
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.
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, vea IncludeExceptionDetailInFaults.
Constructores
ServiceBehaviorAttribute() |
Inicializa una nueva instancia de la clase ServiceBehaviorAttribute. |
Propiedades
AddressFilterMode |
Obtiene o establece el AddressFilterMode utilizado por el distribuidor para enrutar los mensajes entrantes al punto final correcto. |
AutomaticSessionShutdown |
Especifica si cerrar automáticamente una sesión cuando un cliente cierra una sesión de salida. |
ConcurrencyMode |
Obtiene o establece si un servicio admite un subproceso, varios subprocesos o llamadas reentrantes. |
ConfigurationName |
Obtiene o establece el valor utilizado para buscar el elemento de servicio en un archivo de configuración de la aplicación. |
EnsureOrderedDispatch |
Obtiene o establece un valor que indica si se garantiza el envío solicitado de servicio. |
IgnoreExtensionDataObject |
Obtiene o establece un valor que especifica si enviar o no datos de serialización desconocidos hacia la conexión. |
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. Establezca este valor como |
InstanceContextMode |
Obtiene o establece el valor que indica cuándo se crean los nuevos objetos de servicio. |
MaxItemsInObjectGraph |
Obtiene o establece el número máximo de elementos permitido en un objeto serializado. |
Name |
Obtiene o establece el valor del atributo de nombre del elemento de servicio en el lenguaje de descripción de servicios Web (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). |
ReleaseServiceInstanceOnTransactionComplete |
Obtiene o establece un valor que especifica si se libera el objeto de servicio cuando se completa la transacción actual. |
TransactionAutoCompleteOnSessionClose |
Obtiene o establece un valor que especifica si se completan las transacciones pendientes cuando la sesión actual se cierra sin 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. |
TransactionTimeout |
Obtiene o establece el período dentro del que una transacción se debe completar. |
TypeId |
Cuando se implementa en una clase derivada, obtiene un identificador único para este 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. |
ValidateMustUnderstand |
Obtiene o establece un valor que especifica si el sistema o la aplicación exige el procesamiento de encabezados |
Métodos
Equals(Object) |
Devuelve un valor que indica si esta instancia es igual que un objeto especificado. (Heredado de Attribute) |
GetHashCode() |
Devuelve el código hash de esta instancia. (Heredado de Attribute) |
GetType() |
Obtiene el Type de la instancia actual. (Heredado de Object) |
GetWellKnownSingleton() |
Recupera un objeto que implementa el servicio y que se utiliza como instancia singleton del servicio o |
IsDefaultAttribute() |
Si se reemplaza en una clase derivada, indica si el valor de esta instancia es el valor predeterminado de la clase derivada. (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. (Heredado de Attribute) |
MemberwiseClone() |
Crea una copia superficial del Object actual. (Heredado de Object) |
SetWellKnownSingleton(Object) |
Especifica un objeto que implementa el servicio y que se utiliza como instancia singleton del servicio. |
ShouldSerializeConfigurationName() |
Devuelve un valor que indica si la propiedad ConfigurationName ha cambiado respecto de su valor predeterminado y se debe serializar. |
ShouldSerializeReleaseServiceInstanceOnTransactionComplete() |
Devuelve un valor que indica si la propiedad ReleaseServiceInstanceOnTransactionComplete ha cambiado respecto de su valor predeterminado y se debe serializar. |
ShouldSerializeTransactionAutoCompleteOnSessionClose() |
Devuelve un valor que indica si la propiedad TransactionAutoCompleteOnSessionClose ha cambiado respecto de su valor predeterminado y se debe serializar. |
ShouldSerializeTransactionIsolationLevel() |
Devuelve un valor que indica si la propiedad TransactionIsolationLevel ha cambiado respecto de su valor predeterminado y se debe serializar. |
ShouldSerializeTransactionTimeout() |
Devuelve un valor que indica si la propiedad TransactionTimeout ha cambiado respecto de su valor predeterminado y se debe serializar. |
ToString() |
Devuelve una cadena que representa el objeto actual. (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. (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. (Heredado de Attribute) |
_Attribute.GetTypeInfoCount(UInt32) |
Recupera el número de interfaces de información de tipo que proporciona un objeto (0 ó 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. (Heredado de Attribute) |
IServiceBehavior.AddBindingParameters(ServiceDescription, ServiceHostBase, Collection<ServiceEndpoint>, BindingParameterCollection) |
Pasa objetos de datos personalizados a los enlaces que admiten las propiedades de comportamiento. |
IServiceBehavior.ApplyDispatchBehavior(ServiceDescription, ServiceHostBase) |
Personaliza el tiempo de ejecución del servicio para admitir las propiedades de comportamiento. |
IServiceBehavior.Validate(ServiceDescription, ServiceHostBase) |
Confirma que la descripción del servicio y el host de servicio son capaces de admitir el comportamiento. |