Partilhar via


Serviços do Windows Communication Foundation e WCF Data Services no Visual Studio

O Visual Studio fornece ferramentas para trabalhar com o WCF (Windows Communication Foundation) e WCF Data Services, tecnologias da Microsoft para criar aplicativos distribuídos. Este tópico fornece uma introdução aos serviços de uma perspectiva do Visual Studio. Para obter a documentação completa, consulte WCF Data Services 4.5.

O que é o WCF?

O WCF (Windows Communication Foundation) é uma estrutura unificada para criar aplicativos distribuídos seguros, confiáveis, transacionados e interoperáveis. Ele substitui tecnologias de comunicação entre processos mais antigas, como serviços Web ASMX, Comunicação Remota do .NET, Serviços Empresariais (Distributed Component Object Model [Distributed COM]) e fila MSMQ (Microsoft Message Queue). O WCF reúne a funcionalidade de todas essas tecnologias em um modelo de programação unificado. Isso simplifica a experiência de desenvolvimento de aplicativos distribuídos.

O que são WCF Data Services

Os WCF Data Services são uma implementação do padrão de protocolo de dados abertos (Protocolo Open Data [OData]). WCF Data Services permite expor dados tabulares como um conjunto de APIs REST, permitindo que você retorne dados usando verbos HTTP padrão, como GET, POST, PUT ou DELETE. No lado do servidor, WCF Data Services estão sendo substituídos por ASP.NET Web API para criar novos serviços OData. A biblioteca de clientes WCF Data Services continua sendo uma boa opção para consumir serviços OData em um aplicativo .NET do Visual Studio (Referência de Serviço de Adição> de Projeto). Para obter mais informações, consulte WCF Data Services 4.5.

modelo de programação do WCF

O modelo de programação do WCF baseia-se na comunicação entre duas entidades: um serviço WCF e um cliente WCF. O modelo de programação é encapsulado no namespace System.ServiceModel no .NET.

Serviço WCF

Um serviço WCF é baseado em uma interface que define um contrato entre o serviço e o cliente. Ele é marcado com um atributo ServiceContractAttribute, conforme mostrado no seguinte código:

[ServiceContract]
public interface IService1

Você define funções ou métodos expostos por um serviço WCF marcando-os com um atributo OperationContractAttribute.

[OperationContract]
string GetData(string value);

Além disso, você pode expor dados serializados marcando um tipo composto com um atributo DataContractAttribute. Isso habilita a associação de dados em um cliente.

Depois que uma interface e seus métodos são definidos, eles são encapsulados em uma classe que implementa a interface. Uma única classe de serviço WCF pode implementar vários contratos de serviço.

Um serviço WCF é exposto para consumo por meio do que é conhecido como um ponto de extremidade. O ponto de extremidade fornece a única maneira de se comunicar com o serviço; você não pode acessar o serviço por meio de uma referência direta como faria com outras classes.

Um ponto de extremidade é composto por um endereço, uma associação e um contrato. O endereço define onde o serviço está localizado; isso pode ser uma URL, um endereço de Protocolo de transferência de arquivos (FTP) ou uma rede ou caminho local. Uma associação define a maneira como você se comunica com o serviço. As associações do WCF fornecem um modelo versátil para especificar um protocolo como HTTP ou FTP, um mecanismo de segurança como a Autenticação do Windows ou nomes de usuário e senhas e muito mais. Um contrato inclui as operações expostas pela classe de serviço WCF.

Vários pontos de extremidade podem ser expostos para um único serviço WCF. Isso permite que clientes diferentes se comuniquem com o mesmo serviço de maneiras diferentes. Por exemplo, um serviço bancário pode fornecer um ponto de extremidade para funcionários e outro para clientes externos, cada um usando um endereço, associação e/ou contrato diferentes.

Cliente de WCF

Um cliente WCF consiste em um proxy que permite que um aplicativo se comunique com um serviço WCF e um ponto de extremidade que corresponde a um ponto de extremidade definido para o serviço. O proxy é gerado no lado do cliente no arquivo app.config e inclui informações sobre os tipos e métodos expostos pelo serviço. Para serviços que expõem vários pontos de extremidade, o cliente pode selecionar aquele que melhor atenda às suas necessidades, por exemplo, para se comunicar por HTTP e usar a Autenticação do Windows.

Depois que um cliente WCF for criado, você referencia o serviço em seu código da mesma forma que faria com qualquer outro objeto. Por exemplo, para chamar o método GetData mostrado anteriormente, você escreveria um código semelhante ao seguinte:

private void button1_Click(System.Object sender, System.EventArgs e)
{
    ServiceReference1.Service1Client client = new
        ServiceReference1.Service1Client();
    string returnString;

    returnString = client.GetData(textBox1.Text);
    label1.Text = returnString;
}

Ferramentas WCF no Visual Studio

O Visual Studio fornece ferramentas para ajudá-lo a criar serviços WCF e clientes WCF. Para um passo a passo que demonstra as ferramentas, consulte instruções passo a passo: Criando um serviço WCF simples no Windows Forms.

Criar e testar serviços do WCF

Você pode usar os modelos do Visual Studio do WCF como uma base para criar rapidamente seu próprio serviço. Em seguida, você pode usar o Host Automático do Serviço WCF e o Cliente de Teste do WCF para depurar e testar o serviço. Juntas, essas ferramentas fornecem um ciclo de teste e depuração rápido e conveniente e eliminam a exigência de se comprometer com um modelo de hospedagem em um estágio inicial.

Modelos do WCF

Os modelos do Visual Studio do WCF fornecem uma estrutura de classe básica para o desenvolvimento de serviços. Vários modelos do WCF estão disponíveis na caixa de diálogo Adicionar Novo Projeto. Eles incluem projetos lLibrary do serviço WCF, sites de serviço do WCF e modelos de item de serviço do WCF.

Quando você seleciona um modelo, os arquivos são adicionados para um contrato de serviço, uma implementação de serviço e uma configuração de serviço. Todos os atributos necessários já foram adicionados, criando um tipo simples de serviço "Hello World" e você não precisou escrever nenhum código. É claro que você deseja adicionar código para fornecer funções e métodos para seu serviço do mundo real, mas os modelos fornecem a base básica.

Para saber mais sobre modelos do WCF, confira Modelos do Visual Studio do WCF.

Host de serviço do WCF

Quando você inicia o depurador do Visual Studio (pressionando F5) para um projeto de serviço WCF, a ferramenta Host de Serviço do WCF é iniciada automaticamente para hospedar o serviço localmente. O Host de Serviço do WCF enumera os serviços em um projeto de serviço WCF, carrega a configuração do projeto e cria uma instância de um host para cada serviço encontrado.

Usando o Host de Serviço do WCF, você pode testar um serviço WCF sem escrever nenhum código extra ou se comprometer com um host específico durante o desenvolvimento.

Para saber mais sobre o Host de Serviço do WCF, consulte Host de serviço do WCF (WcfSvcHost.exe).

Cliente de teste do WCF

O Cliente de Teste do WCF é uma ferramenta que permite testar parâmetros de teste, enviar essa entrada a um serviço WCF e exibir a resposta retornada pelo serviço. Ele fornece uma experiência de teste de serviço conveniente quando combinado com o host de serviço WCF. Encontre a ferramenta na pasta %ProgramFiles(x86)%\Microsoft Visual Studio\2017\Enterprise\Common7\IDE.

Quando você pressiona F5 para depurar um projeto de serviço do WCF, o Cliente de Teste do WCF abre e exibe uma lista de pontos de extremidade de serviço definidos no arquivo de configuração. Você pode testar os parâmetros e iniciar o serviço, e repetir esse processo para testar e validar continuamente o serviço.

Para saber mais sobre o Cliente de Teste do WCF, consulte Cliente de teste do WCF (WcfTestClient.exe).

Acessar serviõs WCF no Visual Studio

O Visual Studio simplifica a tarefa de criar clientes WCF, gerando automaticamente um proxy e um ponto de extremidade para serviços que você adiciona usando a caixa de diálogo Adicionar Referência de Serviço. Todas as informações de configuração necessárias são adicionadas ao arquivo app.config. Na maioria das vezes, tudo o que você precisa fazer é instanciar o serviço para usá-lo.

A caixa de diálogo Adicionar Referência de Serviço permite que você insira o endereço de um serviço ou pesquise um serviço definido em sua solução. A caixa de diálogo retorna uma lista de serviços e as operações fornecidas por esses serviços. Ele também permite que você defina o namespace pelo qual você fará referência aos serviços no código.

A caixa de diálogo Configurar Referências de Serviço permite personalizar a configuração de um serviço. Você pode alterar o endereço de um serviço, especificar o nível de acesso, o comportamento assíncrono e os tipos de contrato de mensagem e configurar a reutilização de tipo.

Selecionar um ponto de extremidade de serviço

Alguns serviços do WCF (Windows Communication Foundation) expõem vários pontos de extremidade por meio dos quais um cliente pode se comunicar com o serviço. Por exemplo, um serviço pode expor um ponto de extremidade que usa uma associação HTTP e um nome de usuário e segurança de senha e um segundo ponto de extremidade que usa Autenticação FTP e Windows. O primeiro ponto de extremidade pode ser usado por aplicativos que acessam o serviço de fora de um firewall, enquanto o segundo pode ser usado em uma intranet.

Nesse caso, você pode especificar o endpointConfigurationName como um parâmetro para o construtor para uma referência de serviço.

Observação

Seu computador pode mostrar diferentes nomes ou locais para alguns dos elementos de interface do usuário do Visual Studio neste artigo. Você pode estar usando outra edição do Visual Studio ou outras configurações de ambiente. Para obter mais informações, confira Personalizar o IDE.

Para selecionar um ponto de extremidade de serviço

  1. Adicione uma referência a um serviço WCF clicando com o botão direito do mouse no nó do projeto em Gerenciador de Soluções e escolhendo Adicionar referência de serviço.

  2. No Editor de Código, adicione um construtor para a referência de serviço:

    ServiceReference.Service1Client proxy = new ServiceReference.Service1Client(
    

    Observação

    Substitua ServiceReference pelo namespace para a referência de serviço e substitua Service1Client pelo nome do serviço.

  3. Uma lista do IntelliSense é exibida que inclui as sobrecargas para o construtor. Selecione a sobrecarga endpointConfigurationName As String.

  4. Após a sobrecarga, digite = ConfigurationName, em que ConfigurationName é o nome do ponto de extremidade que você deseja usar.

    Observação

    Se você não souber os nomes dos pontos de extremidade disponíveis, poderá encontrá-los no arquivo app.config.

Para localizar os pontos de extremidade disponíveis para um serviço WCF

  1. Em Gerenciador de Soluções, clique com o botão direito do mouse no arquivo deapp.config do projeto que contém a referência de serviço e selecione Abrir. O arquivo aparece no editor de códigos.

  2. Pesquise a <Client> marca no arquivo.

  3. Pesquise abaixo da marca <Client> para obter uma marca que começa com <Endpoint>.

    Se a referência de serviço fornecer vários pontos de extremidade, haverá duas ou mais marcas <Endpoint.

  4. Dentro da marca <EndPoint>, você encontrará um parâmetro name="SomeService" (em que SomeService representa um nome de ponto de extremidade). Esse é o nome do ponto de extremidade que pode ser passado para a sobrecarga endpointConfigurationName As String de um construtor para uma referência de serviço.

Chamar um método de serviço de forma assíncrona

A maioria dos métodos nos serviços do WCF (Windows Communication Foundation) pode ser chamada de forma síncrona ou assíncrona. Chamar um método de forma assíncrona permite que seu aplicativo continue a funcionar enquanto o método está sendo chamado quando ele opera em uma conexão lenta.

Por padrão, quando uma referência de serviço é adicionada a um projeto, ela é configurada para chamar métodos de forma síncrona. Você pode alterar o comportamento para chamar métodos de forma assíncrona alterando uma configuração na caixa de diálogo Configurar Referência de Serviço.

Observação

Essa opção é definida por serviço. Se um método para um serviço for chamado de forma assíncrona, todos os métodos deverão ser chamados de forma assíncrona.

Observação

Seu computador pode mostrar diferentes nomes ou locais para alguns dos elementos de interface do usuário do Visual Studio neste artigo. Você pode estar usando outra edição do Visual Studio ou outras configurações de ambiente. Para obter mais informações, confira Personalizar o IDE.

Para chamar um método de serviço de forma assíncrona

  1. Em Gerenciador de Soluções, selecione a referência de serviço.

  2. No menu Projeto, clique em Configurar Referência de Serviço.

  3. Na caixa de diálogo Configurar Referência de Serviço, marque a caixa de seleção Gerar operações assíncronas.

Associar dados retornados por um serviço

Você pode associar dados retornados por um serviço WCF (Windows Communication Foundation) a um controle, assim como pode associar qualquer outra fonte de dados a um controle. Quando você adiciona uma referência a um serviço WCF, se o serviço contiver tipos compostos que retornam dados, eles serão adicionados automaticamente à janela Fontes de Dados.

Para associar um controle a um único campo de dados retornado por um serviço WCF

  1. No menu Dados, clique em Mostrar Fontes de Dados.

    A janela Fontes de Dados é exibida.

  2. Na janela Fontes de Dados, expanda o nó para sua referência de serviço. Todos os tipos compostos retornados pela exibição do serviço.

  3. Expanda um nó para um tipo. Os campos de dados desse tipo são exibidos.

  4. Selecione um campo e clique na seta da lista suspensa para exibir uma lista de controles disponíveis para o tipo de dados.

  5. Clique no tipo de controle ao qual você deseja associar.

  6. Arraste o campo para um formulário. O controle é adicionado ao formulário, juntamente com um componente BindingSource e um componente BindingNavigator.

  7. Repita as etapas 4 a 6 para quaisquer outros campos que você deseja associar.

Para associar um controle ao tipo composto retornado por um serviço WCF

  1. No menu Dados, selecione Mostrar Fontes de Dados. A janela Fontes de Dados é exibida.

  2. Na janela Fontes de Dados, expanda o nó para sua referência de serviço. Todos os tipos compostos retornados pela exibição do serviço.

  3. Selecione um nó para um tipo e clique na seta da lista suspensa para exibir uma lista de opções disponíveis.

  4. Clique em DataGridView para exibir os dados em uma grade ou em Detalhes para exibir os dados em controles individuais.

  5. Arraste o nó para o formulário. Os controles são adicionados ao formulário, juntamente com um componente BindingSource e um componente BindingNavigator.

Configurar um serviço para reutilizar tipos existentes

Quando uma referência de serviço é adicionada a um projeto, todos os tipos definidos no serviço são gerados no projeto local. Em muitos casos, isso cria tipos duplicados quando um serviço usa tipos .NET comuns ou quando os tipos são definidos em uma biblioteca compartilhada.

Para evitar esse problema, os tipos em assemblies referenciados são compartilhados por padrão. Se você quiser desabilitar o compartilhamento de tipo para um ou mais assemblies, poderá fazer isso na caixa de diálogo Configurar Referências de Serviço.

Para desabilitar o compartilhamento de tipo em um único assembly

  1. Em Gerenciador de Soluções, selecione a referência de serviço.

  2. No menu Projeto, clique em Configurar Referência de Serviço.

  3. Na caixa de diálogo Configurar Referências de Serviço, selecione Reutilizar tipos em assemblies referenciados especificados.

  4. Marque a caixa de seleção para cada assembly no qual você deseja habilitar o compartilhamento de tipos. Para desabilitar o compartilhamento de tipo para um assembly, deixe a caixa de seleção desmarcada.

Para desabilitar o compartilhamento de tipos em todos os assemblies

  1. Em Gerenciador de Soluções, selecione a referência de serviço.

  2. No menu Projeto, clique em Configurar Referência de Serviço.

  3. Na caixa de diálogo Configurar Referências de Serviço, desmarque a caixa de seleção Reutilizar tipos em assemblies referenciados especificados.

Título Descrição
Passo a passo: criando um Serviço WCF em Windows Forms Fornece uma demonstração passo a passo da criação e do uso de serviços WCF no Visual Studio.
Passo a passo: criando um serviço de dados WCF com WPF e Entity Framework Fornece uma demonstração passo a passo de como criar e usar WCF Data Services no Visual Studio.
Usando as ferramentas de desenvolvimento do WCF Discute como criar e testar serviços WCF no Visual Studio.
Como adicionar, atualizar ou remover uma referência de WCF Data Service
Solução de problemas de referências de serviço Apresenta alguns erros comuns que podem ocorrer com referências de serviço e como impedi-los.
Depurando serviços WCF Descreve os problemas comuns de depuração e técnicas que você pode encontrar ao depurar aplicativos Web.
Passo a passo: criando um aplicativo de dados de N camadas Fornece instruções passo a passo para criar um conjunto de dados tipado e separar o código do TableAdapter e do conjunto de dados em vários projetos.
Configurar a caixa de diálogo de referência de serviço Descreve os elementos da interface do usuário da caixa de diálogo Configurar Referência de Serviço.

Referência

Confira também