Condividi tramite


Specifica del comportamento in fase di esecuzione del servizio

Dopo aver progettato un contratto di servizio (Progettazione dei contratti di servizio) e implementato il contratto di servizio (Implementazione dei contratti di servizio) è possibile configurare il comportamento dell'operazione del runtime del servizio. 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. Mentre alcuni comportamenti vengono applicati come attributi, molti vengono applicati utilizzando un file di configurazione dell'applicazione o a livello di programmazione. Per ulteriori informazioni su sulla configurazione dell'applicazione del servizio, vedere Configurazione dei servizi.

Panoramica

Il contratto definisce gli input, gli output, i tipi di dati e le funzionalità di un servizio di quel tipo. 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. Il client conosce le informazioni contrattuali, sull'associazione e sull'indirizzo, senza le quali non potrebbe utilizzare il servizio.

Le specifiche dell'operazione, ad esempio i problemi di threading o la gestione delle istanze, sono tuttavia opache ai client. Dopo aver implementato il contratto di servizio, è possibile configurare numerose caratteristiche dell'operazione utilizzando i comportamenti. I comportamenti sono oggetti che modificano il runtime Windows Communication Foundation (WCF) impostando una proprietà runtime o inserendo un tipo di personalizzazione nel runtime. Per ulteriori informazioni su sulla modifica del runtime creando comportamenti definiti dall'utente, vedere Estensione di ServiceHost e del livello del modello di servizi.

Gli attributi System.ServiceModel.ServiceBehaviorAttribute e System.ServiceModel.OperationBehaviorAttribute sono i comportamenti più utili ed espongono le funzionalità dell'operazione richieste più comunemente. Essendo degli attributi, vengono applicati all'implementazione del servizio o dell'operazione. 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.

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 data una descrizione rapida di molti dei comportamenti forniti dal sistema nei vari ambiti che possono essere di interesse per gli sviluppatori di WCF.

ServiceBehaviorAttribute e OperationBehaviorAttribute

I comportamenti più importanti sono gli attributi ServiceBehaviorAttribute e OperationBehaviorAttribute che è possibile utilizzare per controllare:

  • Durate delle istanze

  • Supporto di sincronizzazione e concorrenza

  • Comportamento di configurazione

  • Comportamento della transazione

  • Comportamento della serializzazione

  • Trasformazione dei metadati

  • Durata della sessione

  • Filtraggio dell'indirizzo ed elaborazione dell'intestazione

  • Rappresentazione

  • Per utilizzare questi attributi, contrassegnare l'implementazione del servizio o dell'operazione con l'attributo appropriato per quell'ambito e impostare le proprietà. Nell'esempio di codice seguente, ad esempio, viene illustrata un'implementazione dell'operazione che utilizza la proprietà System.ServiceModel.OperationBehaviorAttribute.Impersonation per richiedere che i chiamanti di questa operazione supportino la rappresentazione.

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. Un'operazione che richiede una transazione dal client, ad esempio, deve essere configurata in modo che utilizzi un'associazione che supporta transazioni propagate.

Servizi Singleton noti

È possibile utilizzare gli attributi ServiceBehaviorAttribute e OperationBehaviorAttribute per controllare determinate durate, sia di InstanceContext che degli oggetti servizio che implementano le operazioni.

La proprietà System.ServiceModel.ServiceBehaviorAttribute.InstanceContextMode, ad esempio, consente di controllare la frequenza di rilascio di InstanceContext, mentre le proprietà System.ServiceModel.OperationBehaviorAttribute.ReleaseInstanceMode e System.ServiceModel.ServiceBehaviorAttribute.ReleaseServiceInstanceOnTransactionComplete consentono di controllare quando l'oggetto servizio viene rilasciato.

È tuttavia possibile creare un oggetto servizio e quindi creare l'host del servizio tramite quell'oggetto. A tale scopo, è necessario impostare la proprietà System.ServiceModel.ServiceBehaviorAttribute.InstanceContextMode su Single, in caso contrario verrà generata un'eccezione quando l'host del servizio viene aperto.

Utilizzare il costruttore System.ServiceModel.ServiceHost.#ctor(System.Object,System.Uri[]) per creare tale servizio. 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. 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.

Si noti che quando un oggetto viene fornito a questo costruttore, alcune funzionalità relative al comportamento di creazione delle istanze Windows Communication Foundation (WCF) operano in modo diverso. La chiamata, ad esempio, di System.ServiceModel.InstanceContext.ReleaseServiceInstance non ha effetto quando viene fornita l'istanza di un oggetto noto. Analogamente, qualsiasi altro meccanismo di rilascio delle istanze viene ignorato. La classe ServiceHost si comporta sempre come se la proprietà System.ServiceModel.OperationBehaviorAttribute.ReleaseInstanceMode fosse impostata su System.ServiceModel.ReleaseInstanceMode.None per tutte le operazioni.

Altri comportamenti del servizio, dell'endpoint, del contratto e dell'operazione

I comportamenti del servizio, ad esempio l'attributo ServiceBehaviorAttribute, agiscono su un servizio intero. Se, ad esempio, si imposta la proprietà System.ServiceModel.ServiceBehaviorAttribute.ConcurrencyMode su System.ServiceModel.ConcurrencyMode.Multiple, è necessario gestire i problemi di sincronizzazione dei thread all'interno di ogni operazione in quel servizio. I comportamenti dell'endpoint operano all'interno di un endpoint. Molti dei comportamenti dell'endpoint forniti dal sistema interessano la funzionalità client. I comportamenti del contratto operano a livello di contratto e i comportamenti dell'operazione modificano il recapito dell'operazione.

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

La pubblicazione di metadati, ad esempio, viene configurata utilizzando l'oggetto ServiceMetadataBehavior. Nel file seguente di configurazione dell'applicazione viene illustrato l'utilizzo più comune.

<configuration>
  <system.serviceModel>
    <services>
      <service 
        name="Microsoft.WCF.Documentation.SampleService"
        behaviorConfiguration="metadataSupport"
      >
        <host>
          <baseAddresses>
            <add baseAddress="https://localhost:8080/SampleService" />
          </baseAddresses>
        </host>
        <endpoint
          address=""
          binding="wsHttpBinding"
          contract="Microsoft.WCF.Documentation.ISampleService"
        />
        <!-- Adds a WS-MetadataExchange endpoint at -->
        <!-- "https://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 -->
        <!-- "https://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. Per informazioni su come utilizzare ognuno di essi, vedere l'argomento di riferimento.

Comportamenti del servizio

I comportamenti seguenti operano sui servizi.

  • AspNetCompatibilityRequirementsAttribute. Applicato a un servizio WCF per indicare se tale servizio può essere eseguito in modalità di compatibilità ASP.NET.

  • ServiceAuthorizationBehavior. Controlla come il servizio autorizza le richieste del client.

  • ServiceCredentials. Configura una credenziale del servizio. Utilizzare questa classe per specificare la credenziale per il servizio, ad esempio un certificato X.509.

  • ServiceDebugBehavior. Attiva informazioni di debug e di Guida per un servizio WCF.

  • ServiceMetadataBehavior. Controlla la pubblicazione dei metadati del servizio e delle informazioni associate.

  • ServiceSecurityAuditBehavior. Specifica il comportamento di controllo degli eventi di sicurezza.

  • ServiceThrottlingBehavior. Configura le impostazioni di velocità runtime che consentono di ottimizzare le prestazioni del servizio.

Comportamenti dell'endpoint

I comportamenti seguenti operano sugli endpoint. Molti di questi comportamenti sono utilizzati in applicazioni client.

  • CallbackBehaviorAttribute. Configura l'implementazione di un servizio di callback in un'applicazione client duplex.

  • CallbackDebugBehavior. Attiva il debug del servizio per un oggetto di callback WCF.

  • ClientCredentials. Consente all'utente di configurare le credenziali client e del servizio, nonché le impostazioni di autenticazione delle credenziali del servizio da utilizzare nel client.

  • ClientViaBehavior. Utilizzato dai client per specificare l'URI (Uniform Resource Identifier) per il quale deve essere creato il canale di trasporto.

  • MustUnderstandBehavior. Consente a WCF di disattivare l'elaborazione di MustUnderstand.

  • SynchronousReceiveBehavior. Indica al runtime di utilizzare un processo di ricezione sincrono per i canali.

  • TransactedBatchingBehavior. Ottimizza le operazioni di ricezione per i trasporti che supportano ricezioni transazionali.

Comportamenti del contratto

DeliveryRequirementsAttribute. Specifica i requisiti della funzionalità che le associazioni devono fornire all'implementazione del servizio o del client.

Comportamenti dell'operazione

I comportamenti dell'operazione seguenti specificano i controlli di serializzazione e di transazione per le operazioni.

Vedere anche

Attività

Procedura: controllare l'istanza del servizio

Altre risorse

Configurazione dei servizi