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.
L'esempio di sessione illustra come implementare un contratto che richiede una sessione. Una sessione fornisce il contesto per l'esecuzione di più operazioni. Ciò consente a un servizio di associare lo stato a una determinata sessione, in modo che le operazioni successive possano usare lo stato di un'operazione precedente. Questo esempio è basato su Getting Started, che implementa un servizio calcolatrice. Il ICalculator contratto è stato modificato per consentire l'esecuzione di un set di operazioni aritmetiche, mantenendo al tempo stesso un risultato in esecuzione. Questa funzionalità è definita dal ICalculatorSession contratto. Il servizio mantiene lo stato per il client quando più operazioni del servizio vengono chiamate per eseguire un calcolo. Il client può recuperare il risultato corrente chiamando Result() e cancellando il risultato su zero chiamando Clear().
In questo esempio il client è un'applicazione console (.exe) e il servizio è ospitato da Internet Information Services (IIS).
Annotazioni
La procedura di installazione e le istruzioni di compilazione per questo esempio si trovano alla fine di questo argomento.
L'impostazione di SessionMode del contratto su Required garantisce che, quando il contratto viene esposto tramite un binding specifico, il binding supporta le sessioni. Se il binding non supporta le sessioni, viene generata un'eccezione. L'interfaccia ICalculatorSession è definita in modo che sia possibile chiamare una o più operazioni, che modifica un risultato in esecuzione, come illustrato nel codice di esempio seguente.
[ServiceContract(Namespace="http://Microsoft.ServiceModel.Samples", SessionMode=SessionMode.Required)]
public interface ICalculatorSession
{
[OperationContract(IsOneWay=true)]
void Clear();
[OperationContract(IsOneWay = true)]
void AddTo(double n);
[OperationContract(IsOneWay = true)]
void SubtractFrom(double n);
[OperationContract(IsOneWay = true)]
void MultiplyBy(double n);
[OperationContract(IsOneWay = true)]
void DivideBy(double n);
[OperationContract]
double Result();
}
Il servizio utilizza un InstanceContextMode di PerSession per associare un determinato contesto di istanza del servizio a ogni sessione in ingresso. Ciò consente al servizio di mantenere il risultato in esecuzione per ogni sessione in una variabile membro locale.
[ServiceBehavior(InstanceContextMode=InstanceContextMode.PerSession)]
public class CalculatorService : ICalculatorSession
{
double result = 0.0D;
public void Clear()
{ result = 0.0D; }
public void AddTo(double n)
{ result += n; }
public void SubtractFrom(double n)
{ result -= n; }
public void MultiplyBy(double n)
{ result *= n; }
public void DivideBy(double n)
{ result /= n; }
public double Result()
{ return result; }
}
Quando si esegue l'esempio, il client effettua diverse richieste al server e richiede il risultato, che viene quindi visualizzato nella finestra della console client. Premere INVIO nella finestra del client per chiudere il client.
(((0 + 100) - 50) * 17.65) / 2 = 441.25
Press <ENTER> to terminate client.
Per configurare, compilare ed eseguire l'esempio
Assicurati di aver eseguito la procedura di installazione di One-Time per gli esempi di Windows Communication Foundation.
Per compilare l'edizione C# o Visual Basic .NET della soluzione, seguire le istruzioni in Compilazione degli esempi di Windows Communication Foundation.
Per eseguire l'esempio in una configurazione con computer singolo o incrociato, seguire le istruzioni riportate in Esecuzione degli esempi di Windows Communication Foundation.