Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Dopo aver progettato un contratto di servizio (progettazione di contratti di servizio) e implementato il contratto di servizio (implementazione dei contratti di servizio) è possibile configurare il comportamento dell'operazione del runtime del servizio. Questo argomento illustra i comportamenti del servizio e delle operazioni forniti dal sistema e descrive dove trovare altre informazioni per creare nuovi comportamenti. Mentre alcuni comportamenti vengono applicati come attributi, molti vengono applicati usando un file di configurazione dell'applicazione o a livello di codice. Per altre informazioni sulla configurazione dell'applicazione di servizio, vedere Configurazione dei servizi.
Informazioni generali
Il contratto definisce gli input, gli output, i tipi di dati e le funzionalità di un servizio di tale tipo. L'implementazione di un contratto di servizio crea una classe che, quando configurata con un binding a un indirizzo, soddisfa il contratto che implementa. Le informazioni contrattuali, vincolanti e di indirizzo sono tutte note dal cliente; senza di essi, il client non può usare il servizio.
Tuttavia, le specifiche dell'operazione, ad esempio i problemi di threading o la gestione delle istanze, sono opache per i client. Dopo aver implementato il contratto di servizio, è possibile configurare un numero elevato di caratteristiche operative usando i comportamenti. I comportamenti sono oggetti che modificano il runtime di Windows Communication Foundation (WCF) impostando una proprietà di runtime o inserendo un tipo di personalizzazione nel runtime. Per altre informazioni sulla modifica del runtime creando comportamenti definiti dall'utente, vedere Estensione di ServiceHost e del livello del modello di servizio.
Gli System.ServiceModel.ServiceBehaviorAttribute attributi e System.ServiceModel.OperationBehaviorAttribute sono i comportamenti più utili ed espongono le funzionalità operative più richieste. Poiché sono attributi, è possibile applicarli all'implementazione del servizio o dell'operazione. Altri comportamenti, ad esempio System.ServiceModel.Description.ServiceMetadataBehavior o System.ServiceModel.Description.ServiceDebugBehavior, vengono in genere applicati usando un file di configurazione dell'applicazione, anche se è possibile usarli a livello di codice.
Questo argomento fornisce una panoramica degli ServiceBehaviorAttribute attributi e OperationBehaviorAttribute , descrive i vari ambiti in cui i comportamenti possono funzionare e fornisce una descrizione rapida di molti dei comportamenti forniti dal sistema nei vari ambiti che possono essere di interesse per gli sviluppatori WCF.
ServiceBehaviorAttribute e OperationBehaviorAttribute
I comportamenti più importanti sono gli ServiceBehaviorAttribute attributi e OperationBehaviorAttribute , che è possibile usare per controllare:
Durate dell'istanza
Supporto della concorrenza e della sincronizzazione
Comportamento della configurazione
Comportamento delle transazioni
Comportamento della serializzazione
Trasformazione dei metadati
Durata della sessione
Filtraggio degli indirizzi e elaborazione delle intestazioni
Impersonificazione
Per usare questi attributi, contrassegnare l'implementazione del servizio o dell'operazione con l'attributo appropriato per tale ambito e impostare le proprietà. Nell'esempio di codice seguente viene illustrata un'implementazione dell'operazione che usa la proprietà OperationBehaviorAttribute.Impersonation per richiedere che i chiamanti di questa operazione supportino la rappresentazione.
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. Ad esempio, un'operazione che richiede una transazione dal client deve essere configurata per utilizzare un binding che supporta le transazioni trasferite.
Well-Known Servizi Singleton
È possibile usare gli attributi ServiceBehaviorAttribute e OperationBehaviorAttribute per controllare determinate durate, sia del servizio InstanceContext che degli oggetti che implementano le operazioni.
Ad esempio, la ServiceBehaviorAttribute.InstanceContextMode proprietà controlla la frequenza InstanceContext con cui viene rilasciato e le OperationBehaviorAttribute.ReleaseInstanceMode proprietà e ServiceBehaviorAttribute.ReleaseServiceInstanceOnTransactionComplete controllano quando viene rilasciato l'oggetto servizio.
Tuttavia, è anche possibile creare manualmente un oggetto servizio e creare l'host del servizio usando tale oggetto. A tale scopo, è necessario impostare anche la ServiceBehaviorAttribute.InstanceContextMode proprietà su Single o viene generata un'eccezione quando l'host del servizio viene aperto.
Usare il ServiceHost(Object, Uri[]) costruttore per creare un servizio di questo tipo. Offre un'alternativa all'implementazione di un oggetto personalizzato System.ServiceModel.Dispatcher.IInstanceContextInitializer quando si vuole fornire un'istanza di oggetto specifica da usare da un servizio singleton. È possibile usare questo overload quando il tipo di implementazione del servizio è difficile da costruire, ad esempio se non implementa un costruttore pubblico senza parametri.
Si noti che quando un oggetto viene fornito a questo costruttore, alcune funzionalità correlate al comportamento di creazione di istanze di Windows Communication Foundation (WCF) funzionano in modo diverso. Ad esempio, la chiamata InstanceContext.ReleaseServiceInstance non ha alcun effetto quando viene fornita un'istanza di oggetto nota. Analogamente, qualsiasi altro meccanismo di rilascio dell'istanza viene ignorato. La ServiceHost classe si comporta sempre come se la OperationBehaviorAttribute.ReleaseInstanceMode proprietà sia impostata su ReleaseInstanceMode.None per tutte le operazioni.
Altri comportamenti di Servizio, Endpoint, Contratto e Operazione
I comportamenti del servizio, ad esempio l'attributo ServiceBehaviorAttribute , operano in un intero servizio. Ad esempio, se si imposta la ServiceBehaviorAttribute.ConcurrencyMode proprietà su ConcurrencyMode.Multiple è necessario gestire i problemi di sincronizzazione dei thread all'interno di ogni operazione in tale servizio. I comportamenti degli endpoint operano in un endpoint; molti dei comportamenti degli endpoint forniti dal sistema sono destinati alle funzionalità client. I comportamenti contrattuali operano a livello di contratto e i comportamenti operativi modificano la consegna delle operazioni.
Molti di questi comportamenti vengono implementati sugli attributi e vengono utilizzati come gli attributi ServiceBehaviorAttribute e OperationBehaviorAttribute, applicandoli alla classe del servizio o all'implementazione dell'operazione appropriata. Altri comportamenti, ad esempio gli ServiceMetadataBehavior oggetti o ServiceDebugBehavior , vengono in genere applicati usando un file di configurazione dell'applicazione, anche se possono essere usati anche a livello di codice.
Ad esempio, la pubblicazione dei metadati viene configurata utilizzando l'oggetto ServiceMetadataBehavior . Il file di configurazione dell'applicazione seguente mostra l'utilizzo più comune.
<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>
Le sezioni seguenti descrivono molti dei comportamenti forniti dal sistema tra i più utili che è possibile usare per modificare la fornitura in tempo reale del servizio o del client. Vedere l'argomento di riferimento per determinare come usare ognuno di essi.
Comportamenti del servizio
I comportamenti seguenti operano sui servizi.
AspNetCompatibilityRequirementsAttribute. Applicato a un servizio WCF per indicare se il servizio può essere eseguito in modalità di compatibilità ASP.NET.
ServiceAuthorizationBehavior. Controlla il modo in cui il servizio autorizza le attestazioni client.
ServiceCredentials. Configura le credenziali di un servizio. Usare questa classe per specificare le credenziali per il servizio, ad esempio un certificato X.509.
ServiceDebugBehavior. Abilita le funzionalità di debug e informazioni della Guida per un servizio WCF.
ServiceMetadataBehavior. Controlla la pubblicazione dei metadati del servizio e le informazioni associate.
ServiceSecurityAuditBehavior. Specifica il comportamento di controllo degli eventi di sicurezza.
ServiceThrottlingBehavior. Configura le impostazioni della velocità effettiva di runtime che consentono di ottimizzare le prestazioni del servizio.
Comportamenti degli endpoint
I comportamenti seguenti operano sugli endpoint. Molti di questi comportamenti vengono usati nelle applicazioni client.
CallbackBehaviorAttribute. Configura un'implementazione del servizio di callback in un'applicazione client duplex.
CallbackDebugBehavior. Abilita il debug del servizio per un oggetto callback WCF.
ClientCredentials. Consente all'utente di configurare le credenziali client e del servizio, nonché le impostazioni di autenticazione delle credenziali del servizio da usare nel client.
ClientViaBehavior. Usato dai client per specificare l'URI (Uniform Resource Identifier) per il quale deve essere creato il canale di trasporto.
MustUnderstandBehavior. Indica a WCF di disabilitare l'elaborazione di
MustUnderstand.SynchronousReceiveBehavior. Indica al runtime di usare un processo di ricezione sincrono per i canali.
TransactedBatchingBehavior. Ottimizza le operazioni di ricezione per i trasporti che supportano le ricezioni transazionali.
Comportamenti del contratto
DeliveryRequirementsAttribute. Specifica i requisiti di funzionalità che le associazioni devono fornire al servizio o all'implementazione client.
Comportamenti dell'operazione
I comportamenti dell'operazione seguenti specificano la serializzazione e i controlli delle transazioni per le operazioni.
DataContractSerializerOperationBehavior. Rappresenta il comportamento di runtime di System.Runtime.Serialization.DataContractSerializer.
XmlSerializerOperationBehavior. Controlla il comportamento di runtime dell'oggetto
XmlSerializere lo associa a un'operazione.TransactionFlowAttribute. Specifica il livello in cui un'operazione del servizio accetta un'intestazione di transazione.