InstanciaçãoInstancing

A amostra Desestatamento demonstra a configuração de comportamento de instancing, que controla como as instâncias de uma classe de serviço são criadas em resposta às solicitações do cliente.The Instancing sample demonstrates the instancing behavior setting, which controls how instances of a service class are created in response to client requests. A amostra é baseada no GettingStarted ICalculator , que implementa o contrato de serviço.The sample is based on the Getting Started, which implements the ICalculator service contract. Esta amostra define um ICalculatorInstancenovo contrato, ICalculatorque herda de .This sample defines a new contract, ICalculatorInstance, which inherits from ICalculator. O contrato especificado por ICalculatorInstance prevê três operações adicionais para inspecionar o estado da instância de serviço.The contract specified by ICalculatorInstance provides three additional operations for inspecting the state of the service instance. Alterando a configuração de instancing, você pode observar a mudança de comportamento executando o cliente.By altering the instancing setting, you can observe the change in behavior by running the client.

Nesta amostra, o cliente é um aplicativo de console (.exe) e o serviço é hospedado pelo Internet Information Services (IIS).In this sample, the client is a console application (.exe) and the service is hosted by Internet Information Services (IIS).

Observação

O procedimento de configuração e as instruções de construção desta amostra estão localizados no final deste tópico.The setup procedure and build instructions for this sample are located at the end of this topic.

Os seguintes modos de instancing estão disponíveis:The following instancing modes are available:

  • PerCall: Uma nova instância de serviço é criada para cada solicitação do cliente.PerCall: A new service instance is created for each client request.

  • PerSession: Uma nova instância é criada para cada nova sessão de cliente, e mantida durante toda a vida dessa sessão (requer uma vinculação que suporta a sessão).PerSession: A new instance is created for each new client session, and maintained for the lifetime of that session (requires a binding that supports session).

  • Single: Uma única instância da classe de serviço lida com todas as solicitações do cliente durante a vida útil do aplicativo.Single: A single instance of the service class handles all client requests for the lifetime of the application.

A classe de serviço especifica o [ServiceBehavior(InstanceContextMode=<setting>)] comportamento de instancing com o atributo mostrado na amostra de código a seguir.The service class specifies instancing behavior with the [ServiceBehavior(InstanceContextMode=<setting>)] attribute as shown in the code sample that follows. Ao alterar quais linhas são comentadas, você pode observar o comportamento de cada um dos modos de instância.By changing which lines are commented out, you can observe the behavior of each of the instance modes. Lembre-se de reconstruir o serviço depois de alterar o modo de instancing.Remember to rebuild the service after changing the instancing mode. Não há configurações relacionadas ao instancing para especificar no cliente.There are no instancing-related settings to specify on the client.

// Enable one of the following instance modes to compare instancing behaviors.  
 [ServiceBehavior(InstanceContextMode=InstanceContextMode.PerSession)]  
  
// PerCall creates a new instance for each operation.  
//[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall)]  
  
// Singleton creates a single instance for application lifetime.  
//[ServiceBehavior(InstanceContextMode = InstanceContextMode.Single)]  
public class CalculatorService : ICalculatorInstance  
{  
    static Object syncObject = new object();  
    static int instanceCount;  
    int instanceId;  
    int operationCount;  
  
    public CalculatorService()  
    {  
        lock (syncObject)  
        {  
            instanceCount++;  
            instanceId = instanceCount;  
        }  
    }  
  
    public double Add(double n1, double n2)  
    {  
        operationCount++;  
        return n1 + n2;  
    }  
  
    public double Subtract(double n1, double n2)  
    {  
        Interlocked.Increment(ref operationCount);  
        return n1 - n2;  
    }  
  
    public double Multiply(double n1, double n2)  
    {  
        Interlocked.Increment(ref operationCount);  
        return n1 * n2;  
    }  
  
    public double Divide(double n1, double n2)  
    {  
        Interlocked.Increment(ref operationCount);  
        return n1 / n2;  
    }  
  
    public string GetInstanceContextMode()  
    {   // Return the InstanceContextMode of the service  
        ServiceHost host = (ServiceHost)OperationContext.Current.Host;  
        ServiceBehaviorAttribute behavior = host.Description.Behaviors.Find<ServiceBehaviorAttribute>();  
        return behavior.InstanceContextMode.ToString();  
    }  
  
    public int GetInstanceId()  
    {   // Return the id for this instance  
        return instanceId;  
    }  
  
    public int GetOperationCount()  
    {   // Return the number of ICalculator operations performed
        // on this instance  
        lock (syncObject)  
        {  
            return operationCount;  
        }  
    }  
}  
  
static void Main()  
{  
    // Create a client.  
    CalculatorInstanceClient client = new CalculatorInstanceClient();  
    string instanceMode = client.GetInstanceContextMode();  
    Console.WriteLine("InstanceContextMode: {0}", instanceMode);  
    DoCalculations(client);  
  
    // Create a second client.  
    CalculatorInstanceClient client2 = new CalculatorInstanceClient();  
  
    DoCalculations(client2);  
  
    Console.WriteLine();  
    Console.WriteLine("Press <ENTER> to terminate client.");  
    Console.ReadLine();  
}  

Quando você executa a amostra, as solicitações e respostas da operação são exibidas na janela do console cliente.When you run the sample, the operation requests and responses are displayed in the client console window. O modo de instância em que o serviço está sendo executado é exibido.The instance mode the service is running under is displayed. Após cada operação, a id de ocorrência e a contagem de operações são exibidas para refletir o comportamento do modo de instancing.After each operation, the instance ID and operation count are displayed to reflect the behavior of the instancing mode. Pressione ENTER na janela do cliente para desligar o cliente.Press ENTER in the client window to shut down the client.

Para configurar, compilar, e executar o exemploTo set up, build, and run the sample

  1. Certifique-se de que você tenha realizado o procedimento de configuração única para as amostras da Windows Communication Foundation.Ensure that you have performed the One-Time Setup Procedure for the Windows Communication Foundation Samples.

  2. Para construir a edição C# ou Visual Basic .NET da solução, siga as instruções em Building the Windows Communication Foundation Samples.To build the C# or Visual Basic .NET edition of the solution, follow the instructions in Building the Windows Communication Foundation Samples.

  3. Para executar a amostra em uma configuração de máquina única ou cruzada, siga as instruções em Executar as amostras da Windows Communication Foundation.To run the sample in a single- or cross-machine configuration, follow the instructions in Running the Windows Communication Foundation Samples.

Importante

Os exemplos podem já estar instalados no seu computador.The samples may already be installed on your machine. Verifique o seguinte diretório (padrão) antes de continuar.Check for the following (default) directory before continuing.

<InstallDrive>:\WF_WCF_Samples

Se esse diretório não existir, vá para a Windows Communication Foundation (WCF) e para o Windows Workflow Foundation (WF) Amostras para .NET Framework 4 para baixar todas as Amostras e amostras da WFWF Windows Communication Foundation (Windows Communication Foundation).If this directory does not exist, go to Windows Communication Foundation (WCF) and Windows Workflow Foundation (WF) Samples for .NET Framework 4 to download all Windows Communication Foundation (WCF) and WFWF samples. Este exemplo está localizado no seguinte diretório.This sample is located in the following directory.

<InstallDrive>:\WF_WCF_Samples\WCF\Basic\Services\Behaviors\Instancing