Specifica del comportamento in fase di esecuzione del servizioSpecifying Service Run-Time Behavior

Dopo aver definito un contratto di servizio (Designing Service Contracts) e implementato tale contratto (Implementing Service Contracts), è possibile configurare il comportamento operativo del runtime del servizio.Once you have designed a service contract (Designing Service Contracts) and implemented your service contract (Implementing Service Contracts) you can configure the operation behavior of the service runtime. In questo argomento vengono illustrati i comportamenti dell'operazione e del servizio forniti dal sistema e viene descritto dove trovare ulteriori informazioni per creare nuovi comportamenti.This topic discusses system-provided service and operation behaviors and describes where to find more information to create new behaviors. Mentre alcuni comportamenti vengono applicati come attributi, molti vengono applicati utilizzando un file di configurazione dell'applicazione o a livello di codice.While some behaviors are applied as attributes, many are applied using an application configuration file or programmatically. Per ulteriori informazioni sulla configurazione dell'applicazione di servizio, vedere configurazione dei servizi.For more information about configuring your service application, see Configuring Services.

PanoramicaOverview

Il contratto definisce gli input, gli output, i tipi di dati e le funzionalità di un servizio di quel tipo.The contract defines the inputs, outputs, data types, and capabilities of a service of that type. L'implementazione di un contratto di servizio crea una classe che, in caso di configurazione con un'associazione in un indirizzo, adempie al contratto che implementa.Implementing a service contract creates a class that, when configured with a binding at an address, fulfills the contract it implements. Il client conosce le informazioni contrattuali, sull'associazione e sull'indirizzo, senza le quali non potrebbe utilizzare il servizio.Contractual, binding, and address information are all known by the client; without them, the client cannot make use of the service.

Le specifiche dell'operazione, ad esempio i problemi di threading o la gestione delle istanze, sono tuttavia opache ai client.However, operation specifics, such as threading issues or instance management, are opaque to clients. Dopo aver implementato il contratto di servizio, è possibile configurare numerose caratteristiche dell'operazione utilizzando i comportamenti.Once you have implemented your service contract, you can configure a large number of operation characteristics by using behaviors. I comportamenti sono oggetti che modificano il runtime Windows Communication Foundation (WCF) impostando una proprietà Runtime o inserendo un tipo di personalizzazione nel Runtime.Behaviors are objects that modify the Windows Communication Foundation (WCF) runtime by either setting a runtime property or by inserting a customization type into the runtime. Per ulteriori informazioni sulla modifica del runtime mediante la creazione di comportamenti definiti dall'utente, vedere estensione di ServiceHost e del livello del modello di servizio.For more information about modifying the runtime by creating user-defined behaviors, see Extending ServiceHost and the Service Model Layer.

Gli attributi System.ServiceModel.ServiceBehaviorAttribute e System.ServiceModel.OperationBehaviorAttribute sono i comportamenti più utili ed espongono le funzionalità dell'operazione richieste più comunemente.The System.ServiceModel.ServiceBehaviorAttribute and System.ServiceModel.OperationBehaviorAttribute attributes are the most widely useful behaviors and expose the most commonly requested operation features. Essendo degli attributi, vengono applicati all'implementazione del servizio o dell'operazione.Because they are attributes, you apply them to the service or operation implementation. Altri comportamenti, ad esempio System.ServiceModel.Description.ServiceMetadataBehavior o System.ServiceModel.Description.ServiceDebugBehavior, vengono in genere applicati utilizzando un file di configurazione dell'applicazione, anche se è possibile utilizzarli a livello di programmazione.Other behaviors, such as the System.ServiceModel.Description.ServiceMetadataBehavior or System.ServiceModel.Description.ServiceDebugBehavior, are typically applied using an application configuration file, although you can use them programmatically.

In questo argomento viene fornita una panoramica degli attributi ServiceBehaviorAttribute e OperationBehaviorAttribute, vengono descritti i vari ambiti in cui possono operare i comportamenti e viene fornita una breve descrizione di molti dei comportamenti forniti dal sistema nei vari ambiti che possono essere di interesse per WCF gli sviluppatori.This topic provides an overview of the ServiceBehaviorAttribute and OperationBehaviorAttribute attributes, describes the various scopes at which behaviors can operate, and provides a quick description of many of the system-provided behaviors at the various scopes that may be of interest to WCF developers.

ServiceBehaviorAttribute e OperationBehaviorAttributeServiceBehaviorAttribute and OperationBehaviorAttribute

I comportamenti più importanti sono gli attributi ServiceBehaviorAttribute e OperationBehaviorAttribute che è possibile utilizzare per controllare:The most important behaviors are the ServiceBehaviorAttribute and OperationBehaviorAttribute attributes, which you can use to control:

  • Durate delle istanzeInstance lifetimes

  • Supporto di sincronizzazione e concorrenzaConcurrency and synchronization support

  • Comportamento di configurazioneConfiguration behavior

  • Comportamento della transazioneTransaction behavior

  • Comportamento della serializzazioneSerialization behavior

  • Trasformazione dei metadatiMetadata transformation

  • Durata della sessioneSession lifetime

  • Filtraggio dell'indirizzo ed elaborazione dell'intestazioneAddress filtering and header processing

  • rappresentazioneImpersonation

  • Per utilizzare questi attributi, contrassegnare l'implementazione del servizio o dell'operazione con l'attributo appropriato per quell'ambito e impostare le proprietà.To use these attributes, mark the service or operation implementation with the attribute appropriate to that scope and set the properties. Nell'esempio di codice seguente, ad esempio, viene illustrata un'implementazione dell'operazione che utilizza la proprietà OperationBehaviorAttribute.Impersonation per richiedere che i chiamanti di questa operazione supportino la rappresentazione.For example, the following code example shows an operation implementation that uses the OperationBehaviorAttribute.Impersonation property to require that callers of this operation support impersonation.

using System;
using System.Collections.Generic;
using System.ServiceModel;
using System.Threading;

namespace Microsoft.WCF.Documentation
{
  [ServiceContract(
    Name="SampleHello",
    Namespace="http://microsoft.wcf.documentation"
  )]
  public interface IHello
  {
    [OperationContract]
    string Hello(string greeting);
  }

  public class HelloService : IHello
  {

    public HelloService()
    {
      Console.WriteLine("Service object created: " + this.GetHashCode().ToString());
    }

    ~HelloService()
    {
      Console.WriteLine("Service object destroyed: " + this.GetHashCode().ToString());
    }

    [OperationBehavior(Impersonation=ImpersonationOption.Required)]
    public string Hello(string greeting)
    {
      Console.WriteLine("Called by: " + Thread.CurrentPrincipal.Identity.Name);
      Console.WriteLine("IsAuthenticated: " + Thread.CurrentPrincipal.Identity.IsAuthenticated.ToString());
      Console.WriteLine("AuthenticationType: " + Thread.CurrentPrincipal.Identity.AuthenticationType.ToString());

      Console.WriteLine("Caller sent: " + greeting);
      Console.WriteLine("Sending back: Hi, " + Thread.CurrentPrincipal.Identity.Name);
      return "Hi, " + Thread.CurrentPrincipal.Identity.Name;
    }
  }
}
Imports System.ServiceModel
Imports System.Threading

Namespace Microsoft.WCF.Documentation
  <ServiceContract(Name:="SampleHello", Namespace:="http://microsoft.wcf.documentation")> _
  Public Interface IHello
    <OperationContract> _
    Function Hello(ByVal greeting As String) As String
  End Interface

  Public Class HelloService
      Implements IHello

    Public Sub New()
      Console.WriteLine("Service object created: " & Me.GetHashCode().ToString())
    End Sub

    Protected Overrides Sub Finalize()
      Console.WriteLine("Service object destroyed: " & Me.GetHashCode().ToString())
    End Sub

    <OperationBehavior(Impersonation:=ImpersonationOption.Required)> _
    Public Function Hello(ByVal greeting As String) As String Implements IHello.Hello
      Console.WriteLine("Called by: " & Thread.CurrentPrincipal.Identity.Name)
      Console.WriteLine("IsAuthenticated: " & Thread.CurrentPrincipal.Identity.IsAuthenticated.ToString())
      Console.WriteLine("AuthenticationType: " & Thread.CurrentPrincipal.Identity.AuthenticationType.ToString())

      Console.WriteLine("Caller sent: " & greeting)
      Console.WriteLine("Sending back: Hi, " & Thread.CurrentPrincipal.Identity.Name)
      Return "Hi, " & Thread.CurrentPrincipal.Identity.Name
    End Function
  End Class
End Namespace

Molte delle proprietà richiedono supporto aggiuntivo dall'associazione.Many of the properties require additional support from the binding. Un'operazione che richiede una transazione dal client, ad esempio, deve essere configurata in modo che utilizzi un'associazione che supporta transazioni propagate.For example, an operation that requires a transaction from the client must be configured to use a binding that supports flowed transactions.

Servizi Singleton notiWell-Known Singleton Services

È possibile utilizzare gli attributi ServiceBehaviorAttribute e OperationBehaviorAttribute per controllare determinate durate, sia di InstanceContext che degli oggetti servizio che implementano le operazioni.You can use the ServiceBehaviorAttribute and OperationBehaviorAttribute attributes to control certain lifetimes, both of the InstanceContext and of the service objects that implement the operations.

La proprietà ServiceBehaviorAttribute.InstanceContextMode , ad esempio, consente di controllare la frequenza di rilascio di InstanceContext , mentre le proprietà OperationBehaviorAttribute.ReleaseInstanceMode e ServiceBehaviorAttribute.ReleaseServiceInstanceOnTransactionComplete consentono di controllare quando l'oggetto servizio viene rilasciato.For example, the ServiceBehaviorAttribute.InstanceContextMode property controls how often the InstanceContext is released, and the OperationBehaviorAttribute.ReleaseInstanceMode and ServiceBehaviorAttribute.ReleaseServiceInstanceOnTransactionComplete properties control when the service object is released.

È tuttavia possibile creare un oggetto servizio e quindi creare l'host del servizio tramite quell'oggetto.However, you can also create a service object yourself and create the service host using that object. A tale scopo, è necessario impostare la proprietà ServiceBehaviorAttribute.InstanceContextMode su Single , in caso contrario verrà generata un'eccezione quando l'host del servizio viene aperto.To do so, you must also set the ServiceBehaviorAttribute.InstanceContextMode property to Single or an exception is thrown when the service host is opened.

Utilizzare il costruttore ServiceHost.ServiceHost(Object, Uri[]) per creare tale servizio.Use the ServiceHost.ServiceHost(Object, Uri[]) constructor to create such a service. Fornisce un'alternativa all'implementazione di un'interfaccia System.ServiceModel.Dispatcher.IInstanceContextInitializer personalizzata quando si desidera fornire un'istanza specifica dell'oggetto utilizzabile da un servizio singleton.It provides an alternative to implementing a custom System.ServiceModel.Dispatcher.IInstanceContextInitializer when you wish to provide a specific object instance for use by a singleton service. Questo overload può risultare utile quando il tipo di implementazione del servizio è di difficile costruzione, ad esempio se non implementa alcun costruttore pubblico predefinito privo di parametri.You can use this overload when your service implementation type is difficult to construct (for example, if it does not implement a default public constructor that has no parameters).

Si noti che quando un oggetto viene fornito a questo costruttore, alcune funzionalità relative al comportamento di creazione delle istanze di Windows Communication Foundation (WCF) funzionano in modo diverso.Note that when an object is provided to this constructor, some features related to the Windows Communication Foundation (WCF) instancing behavior work differently. La chiamata, ad esempio, di InstanceContext.ReleaseServiceInstance non ha effetto quando viene fornita l'istanza di un oggetto noto.For example, calling InstanceContext.ReleaseServiceInstance has no effect when a well-known object instance is provided. Analogamente, qualsiasi altro meccanismo di rilascio delle istanze viene ignorato.Similarly, any other instance release mechanism is ignored. La classe ServiceHost si comporta sempre come se la proprietà OperationBehaviorAttribute.ReleaseInstanceMode fosse impostata su ReleaseInstanceMode.None per tutte le operazioni.The ServiceHost class always behaves as if the OperationBehaviorAttribute.ReleaseInstanceMode property is set to ReleaseInstanceMode.None for all operations.

Altri comportamenti del servizio, dell'endpoint, del contratto e dell'operazioneOther Service, Endpoint, Contract, and Operation Behaviors

I comportamenti del servizio, ad esempio l'attributo ServiceBehaviorAttribute , agiscono su un servizio intero.Service behaviors, such as the ServiceBehaviorAttribute attribute, operate across an entire service. Se, ad esempio, si imposta la proprietà ServiceBehaviorAttribute.ConcurrencyMode su ConcurrencyMode.Multiple , è necessario gestire i problemi di sincronizzazione dei thread all'interno di ogni operazione in quel servizio.For example, if you set the ServiceBehaviorAttribute.ConcurrencyMode property to ConcurrencyMode.Multiple you must handle thread synchronization issues inside each operation in that service yourself. I comportamenti dell'endpoint operano all'interno di un endpoint. Molti dei comportamenti dell'endpoint forniti dal sistema interessano la funzionalità client.Endpoint behaviors operate across an endpoint; many of the system-provided endpoint behaviors are for client functionality. I comportamenti del contratto operano a livello di contratto e i comportamenti dell'operazione modificano il recapito dell'operazione.Contract behaviors operate at the contract level, and operation behaviors modify operation delivery.

Molti di questi comportamenti vengono implementati sugli attributi e vengono utilizzati come si utilizzano gli attributi ServiceBehaviorAttribute e OperationBehaviorAttribute , applicandoli alla classe di servizio appropriata o all'implementazione dell'operazione.Many of these behaviors are implemented on attributes, and you make use of them as you do the ServiceBehaviorAttribute and OperationBehaviorAttribute attributes—by applying them to the appropriate service class or operation implementation. Altri comportamenti, ad esempio gli oggetti ServiceMetadataBehavior o ServiceDebugBehavior , vengono in genere applicati utilizzando un file di configurazione dell'applicazione, sebbene sia possibile utilizzarli anche a livello di programmazione.Other behaviors, such as the ServiceMetadataBehavior or ServiceDebugBehavior objects, are typically applied using an application configuration file, although they can also be used programmatically.

La pubblicazione di metadati, ad esempio, viene configurata utilizzando l'oggetto ServiceMetadataBehavior .For example, the publication of metadata is configured by using the ServiceMetadataBehavior object. Nel file seguente di configurazione dell'applicazione viene illustrato l'utilizzo più comune.The following application configuration file shows the most common usage.

<configuration>
  <system.serviceModel>
    <services>
      <service 
        name="Microsoft.WCF.Documentation.SampleService"
        behaviorConfiguration="metadataSupport"
      >
        <host>
          <baseAddresses>
            <add baseAddress="http://localhost:8080/SampleService" />
          </baseAddresses>
        </host>
        <endpoint
          address=""
          binding="wsHttpBinding"
          contract="Microsoft.WCF.Documentation.ISampleService"
        />
        <!-- Adds a WS-MetadataExchange endpoint at -->
        <!-- "http://localhost:8080/SampleService/mex" -->
        <endpoint
           address="mex"
           binding="mexHttpBinding"
           contract="IMetadataExchange"
        />
      </service>
    </services>
    <behaviors>
      <serviceBehaviors>
      <behavior name="metadataSupport">
        <!-- Enables the IMetadataExchange endpoint in services that -->
        <!-- use "metadataSupport" in their behaviorConfiguration attribute. -->
        <!-- In addition, the httpGetEnabled and httpGetUrl attributes publish -->
        <!-- Service metadata for retrieval by HTTP/GET at the address -->
        <!-- "http://localhost:8080/SampleService?wsdl" -->
        <serviceMetadata httpGetEnabled="true" httpGetUrl=""/>
      </behavior>
    </serviceBehaviors>
  </behaviors>
  </system.serviceModel>
</configuration>

Nelle sezioni seguenti vengono descritti molti dei comportamenti più utili forniti dal sistema e che possono essere utilizzati per modificare il recapito runtime del servizio o del client.The following sections describe many of the most useful system-provided behaviors that you can use to modify the runtime delivery of your service or client. Per informazioni su come utilizzare ognuno di essi, vedere l'argomento di riferimento.See the reference topic to determine how to use each one.

Comportamenti del servizioService Behaviors

I comportamenti seguenti operano sui servizi.The following behaviors operate on services.

Comportamenti dell'endpointEndpoint Behaviors

I comportamenti seguenti operano sugli endpoint.The following behaviors operate on endpoints. Molti di questi comportamenti sono utilizzati in applicazioni client.Many of these behaviors are used in client applications.

  • CallbackBehaviorAttributeCallbackBehaviorAttribute. Configura l'implementazione di un servizio di callback in un'applicazione client duplex.Configures a callback service implementation in a duplex client application.

  • CallbackDebugBehaviorCallbackDebugBehavior. Abilita il debug del servizio per un oggetto di callback WCF.Enables service debugging for a WCF callback object.

  • ClientCredentialsClientCredentials. Consente all'utente di configurare le credenziali client e del servizio, nonché le impostazioni di autenticazione delle credenziali del servizio da utilizzare nel client.Allows the user to configure client and service credentials as well as service credential authentication settings for use on the client.

  • ClientViaBehaviorClientViaBehavior. Utilizzato dai client per specificare l'URI (Uniform Resource Identifier) per il quale deve essere creato il canale di trasporto.Used by clients to specify the Uniform Resource Identifier (URI) for which the transport channel should be created.

  • MustUnderstandBehaviorMustUnderstandBehavior. Indica a WCF di disabilitare l'elaborazione del MustUnderstand.Instructs WCF to disable the MustUnderstand processing.

  • SynchronousReceiveBehaviorSynchronousReceiveBehavior. Indica al runtime di utilizzare un processo di ricezione sincrono per i canali.Instructs the runtime to use a synchronous receive process for channels.

  • TransactedBatchingBehaviorTransactedBatchingBehavior. Ottimizza le operazioni di ricezione per i trasporti che supportano ricezioni transazionali.Optimizes the receive operations for transports that support transactional receives.

Comportamenti del contrattoContract Behaviors

DeliveryRequirementsAttributeDeliveryRequirementsAttribute. Specifica i requisiti della funzionalità che le associazioni devono fornire all'implementazione del servizio o del client.Specifies the feature requirements that bindings must provide to the service or client implementation.

Comportamenti dell'operazioneOperation Behaviors

I comportamenti dell'operazione seguenti specificano i controlli di serializzazione e di transazione per le operazioni.The following operation behaviors specify serialization and transaction controls for operations.

Vedere ancheSee also