Compartilhar via


Compatibilidade ASP.NET

O exemplo ASPNetCompatibility demonstra como habilitar modo de compatibilidade ASP.NET no WCF (Windows Communication Foundation). Os serviços em execução no modo de compatibilidade ASP.NET participam totalmente do pipeline de aplicativos ASP.NET e podem usar recursos do ASP.NET, como a autorização de arquivo/URL, o estado de sessão e a classe HttpContext. A classe HttpContext permite o acesso a cookies, sessões e outros recursos do ASP.NET. Esse modo exige que as associações usem o transporte HTTP e que o próprio serviço seja hospedado no IIS.

Neste exemplo, o cliente é um aplicativo de console (um executável) e o serviço é hospedado no IIS (Serviços de Informações da Internet).

Observação

Os procedimentos de instalação e as instruções de compilação para esse exemplo estão localizadas no final deste tópico.

Este exemplo requer um pool de aplicativos do .NET Framework 4 para ser executado. Para criar um novo pool de aplicativos ou modificar o pool de aplicativos padrão, siga estas etapas.

  1. Abra o Painel de Controle. Abra o miniaplicativo Ferramentas Administrativas no título Sistema e Segurança. Abra o miniaplicativo Gerenciador de Serviços de Informações da Internet (IIS).

  2. Expanda a visão de árvore no painel Conexões. Selecione o nó Pools de Aplicativos.

  3. Para definir o pool de aplicativos padrão para usar o .NET Framework 4 (o que pode causar problemas de incompatibilidade com sites existentes), clique com o botão direito do mouse no item de lista DefaultAppPool e selecione Configurações Básicas.... Defina o pull-down da versão do .Net Framework como .Net Framework v4.0.30128 (ou posterior).

  4. Para criar um novo pool de aplicativos que usa o .NET Framework 4 (para preservar a compatibilidade para outros aplicativos), clique com o botão direito do mouse no nó Pools de Aplicativos e selecione Adicionar Pool de Aplicativos.... Nomeie o novo pool de aplicativos e defina o pull down da versão do .Net Framework como .Net Framework v4.0.30128 (ou posterior). Depois de executar as etapas de instalação abaixo, clique com o botão direito do mouse no aplicativo ServiceModelSamples e selecione Gerenciar Aplicativo, Configurações Avançadas.... Defina o Pool de Aplicativos como o novo pool de aplicativos.

Este exemplo se baseia na Introdução, que implementa um serviço de calculadora. O contrato ICalculator foi modificado como o contrato ICalculatorSession para permitir que um conjunto de operações seja executado, mantendo um resultado em execução.

[ServiceContract(Namespace="http://Microsoft.ServiceModel.Samples")]
public interface ICalculatorSession
{
    [OperationContract]
    void Clear();
    [OperationContract]
    void AddTo(double n);
    [OperationContract]
    void SubtractFrom(double n);
    [OperationContract]
    void MultiplyBy(double n);
    [OperationContract]
    void DivideBy(double n);
    [OperationContract]
    double Result();
}

O serviço mantém o estado usando o recurso para cada cliente, pois várias operações de serviço são chamadas para executar um cálculo. O cliente pode recuperar o resultado atual chamando Result e pode limpar o resultado para zero chamando Clear.

O serviço usa a sessão ASP.NET para armazenar o resultado para cada sessão do cliente. Isso permite que o serviço mantenha o resultado em execução para cada cliente em várias chamadas para o serviço.

Observação

O estado da sessão do ASP.NET e as sessões do WCF são coisas muito diferentes. Confira Sessão para obter detalhes sobre as sessões do WCF.

O serviço tem uma dependência íntima no estado de sessão do ASP.NET e requer o modo de compatibilidade do ASP.NET para funcionar corretamente. Esses requisitos são expressos declarativamente aplicando o atributo AspNetCompatibilityRequirements.

[AspNetCompatibilityRequirements(RequirementsMode =
                       AspNetCompatibilityRequirementsMode.Required)]
public class CalculatorService : ICalculatorSession
{
    double Result
    {  // store result in AspNet Session
       get {
          if (HttpContext.Current.Session["Result"] != null)
             return (double)HttpContext.Current.Session["Result"];
          return 0.0D;
       }
       set
       {
          HttpContext.Current.Session["Result"] = value;
       }
    }
    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 você executa a amostra, as solicitações de operação e as respostas são exibidas na janela do console do cliente. Pressione ENTER na janela do cliente para desligar o cliente.

0, + 100, - 50, * 17.65, / 2 = 441.25
Press <ENTER> to terminate client.

Para configurar, compilar, e executar o exemplo

  1. Verifique se você executou as Amostras de Procedimento de Instalação Única para o Windows Communication Foundation.

  2. Para compilar a edição C# ou do Visual Basic .NET da solução, siga as instruções em Como compilar as amostras do Windows Communication Foundation.

  3. Depois que a solução for criada, execute Setup.bat para configurar o aplicativo ServiceModelSamples no IIS 7.0. O diretório ServiceModelSamples agora deve aparecer como um aplicativo IIS 7.0.

  4. Para executar o exemplo em uma configuração de computador único ou entre computadores, siga as instruções em Como executar as amostras do Windows Communication Foundation.

Confira também