Compartilhar via


Endereços do ponto de extremidade

Cada ponto de extremidade tem um endereço associado a ele, que é usado para localizar e identificar o ponto de extremidade. Esse endereço consiste principalmente em um URI (Uniform Resource Identifier), que especifica o local do ponto de extremidade. O endereço do ponto de extremidade é representado no modelo de programação do WCF (Windows Communication Foundation) pela EndpointAddress classe, que contém uma propriedade opcional Identity que permite a autenticação do ponto de extremidade por outros pontos de extremidade que trocam mensagens com ele e um conjunto de propriedades opcionais Headers , que definem quaisquer outros cabeçalhos SOAP necessários para acessar o serviço. Os cabeçalhos opcionais fornecem informações de endereçamento adicionais e mais detalhadas para identificar ou interagir com o ponto de extremidade de serviço. O endereço de um ponto de extremidade é representado no fio como uma referência de ponto de extremidade WS-Addressing (EPR).

Estrutura de URI de um endereço

O URI de endereço para a maioria dos transportes tem quatro partes. Por exemplo, as quatro partes do URI http://www.fabrikam.com:322/mathservice.svc/secureEndpoint podem ser itemizadas da seguinte maneira:

  • Esquema: http:

  • Computador: www.fabrikam.com

  • (opcional) Porta: 322

  • Caminho: /mathservice.svc/secureEndpoint

Definindo um endereço para um serviço

O endereço do ponto de extremidade de um serviço pode ser especificado de forma imperativa usando código ou declarativamente por meio da configuração. A definição de pontos de extremidade no código geralmente não é prática porque as associações e os endereços de um serviço implantado normalmente são diferentes daqueles usados enquanto o serviço está sendo desenvolvido. Geralmente, é mais prático definir pontos de extremidade de serviço usando configuração em vez de código. Manter as informações de associação e endereçamento fora do código permite que elas alterem sem precisar recompilar ou reimplantar o aplicativo.

Definindo um endereço na configuração

Para definir um endpoint em um arquivo de configuração, use o elemento <endpoint>. Para obter detalhes e um exemplo, consulte Especificando um endereço de endpoint.

Definindo um endereço no código

Um endereço de ponto de extremidade pode ser criado em código com a classe EndpointAddress. Para obter detalhes e um exemplo, consulte Especificando um endereço de endpoint.

Pontos de extremidade no WSDL

Um endereço de ponto de extremidade também pode ser representado no WSDL como um elemento EPR WS-Addressing dentro do elemento wsdl:port do ponto de extremidade correspondente. A EPR contém o endereço do ponto de extremidade, assim como quaisquer propriedades do endereço. Para obter detalhes e um exemplo, consulte Especificando um endereço de endpoint.

Suporte à associação múltipla do IIS no .NET Framework 3.5

Os provedores de serviços de Internet geralmente hospedam muitos aplicativos no mesmo servidor e site para aumentar a densidade do site e reduzir o custo total de propriedade. Normalmente, esses aplicativos são associados a endereços base diferentes. Um site do IIS (Serviços de Informações da Internet) pode conter vários aplicativos. Os aplicativos em um site podem ser acessados por meio de uma ou mais associações do IIS.

As associações do IIS fornecem duas informações: um protocolo de associação e informações de associação. O protocolo de associação define o esquema sobre o qual a comunicação ocorre e as informações de associação são as informações usadas para acessar o site.

O exemplo a seguir mostra os componentes que podem estar presentes em uma associação do IIS:

  • Protocolo de associação: HTTP

  • Informações de associação: endereço IP, porta, cabeçalho host

O IIS pode especificar várias associações para cada site, o que resulta em vários endereços base para cada esquema. Antes do .NET Framework 3.5, o WCF não dava suporte a vários endereços para um esquema e, se foram especificados, lançou um ArgumentException durante a ativação.

O .NET Framework 3.5 permite que os provedores de serviços de Internet hospedem vários aplicativos com endereços base diferentes para o mesmo esquema no mesmo site.

Por exemplo, um site pode conter os seguintes endereços base:

  • http://payroll.myorg.com/Service.svc

  • http://shipping.myorg.com/Service.svc

Com o .NET Framework 3.5, você especifica um filtro de prefixo no nível do AppDomain no arquivo de configuração. Faça isso com o <elemento baseAddressPrefixFilters> , que contém uma lista de prefixos. Os endereços base de entrada, fornecidos pelo IIS, são filtrados com base na lista de prefixos opcionais. Por padrão, quando um prefixo não é especificado, todos os endereços são passados. Especificar o prefixo faz com que apenas o endereço base correspondente para esse esquema seja transmitido.

Veja a seguir um exemplo de código de configuração que usa os filtros de prefixo.

<system.serviceModel>  
  <serviceHostingEnvironment>  
     <baseAddressPrefixFilters>  
        <add prefix="net.tcp://payroll.myorg.com:8000"/>  
        <add prefix="http://shipping.myorg.com:8000"/>  
    </baseAddressPrefixFilters>  
  </serviceHostingEnvironment>  
</system.serviceModel>  

No exemplo anterior, net.tcp://payroll.myorg.com:8000 e http://shipping.myorg.com:8000 são os únicos endereços base para seus respectivos esquemas, que são passados.

baseAddressPrefixFilter não dá suporte a curingas.

Os endereços base fornecidos pelo IIS podem ter endereços associados a outros esquemas não presentes na baseAddressPrefixFilters lista. Esses endereços não são filtrados.

Suporte à associação múltipla do IIS no .NET Framework 4 e posterior

A partir do .NET 4, você pode habilitar o suporte a várias associações no IIS sem precisar escolher um único endereço básico definindo a configuração ServiceHostingEnvironment de MultipleSiteBindingsEnabled como true. Esse suporte é limitado a esquemas de protocolo HTTP.

Veja a seguir um exemplo de código de configuração que usa multipleSiteBindingsEnabled no <serviceHostingEnvironment>.

<system.serviceModel>  
  <serviceHostingEnvironment multipleSiteBindingsEnabled="true" >  
  </serviceHostingEnvironment>  
</system.serviceModel>  

Todas as configurações baseAddressPrefixFilters são ignoradas, para protocolos HTTP e não HTTP, quando várias associações de site são habilitadas usando essa configuração.

Para obter detalhes e exemplos, consulte Suporte a várias associações de site do IIS e MultipleSiteBindingsEnabled.

Extensão do endereçamento nos Serviços WCF

O modelo de endereçamento padrão dos serviços do WCF usa o URI de endereço do ponto de extremidade para as seguintes finalidades:

  • Para especificar o endereço de escuta do serviço, o local onde o endpoint escuta mensagens,

  • Especificar o filtro de endereço SOAP, o endereço que um ponto de extremidade espera como um cabeçalho SOAP.

Os valores para cada uma dessas finalidades podem ser especificados separadamente, permitindo várias extensões de endereçamento que abrangem cenários úteis:

  • Intermediários SOAP: uma mensagem enviada por um cliente percorre um ou mais serviços adicionais que processam a mensagem antes de chegar ao destino final. Os intermediários SOAP podem executar várias tarefas, como cache, roteamento, balanceamento de carga ou validação de esquema nas mensagens. Esse cenário é realizado enviando mensagens para um endereço físico separado (via) direcionado ao intermediário, em vez de apenas a um endereço lógico (wsa:To) direcionado ao destino final.

  • O endereço de escuta do ponto de extremidade é um URI privado e é definido como um valor diferente de sua propriedade listenURI.

O endereço de transporte que o via especifica é o local para o qual uma mensagem deve ser inicialmente enviada no caminho para outro endereço remoto especificado pelo parâmetro to onde o serviço está localizado. Na maioria dos cenários da Internet, o via URI é o mesmo que a Uri propriedade do endereço final to do serviço. Você só distingue entre esses dois endereços quando deve fazer o roteamento manual.

Cabeçalhos de endereçamento

Um ponto de extremidade pode ser endereçado por um ou mais cabeçalhos SOAP, além de seu URI básico. Um conjunto de cenários em que isso é útil é um conjunto de cenários intermediários SOAP em que um ponto de extremidade requer que os clientes desse ponto de extremidade incluam cabeçalhos SOAP direcionados a intermediários.

Você pode definir cabeçalhos de endereço personalizados de duas maneiras usando código ou configuração:

A configuração geralmente é preferível ao código, pois permite que você altere os cabeçalhos após a implantação.

Endereços de escuta personalizados

Você pode definir o endereço de escuta para um valor diferente do URI do terminal. Isso é útil em cenários intermediários em que o endereço SOAP a ser exposto é o de um intermediário SOAP público, enquanto o endereço em que o endpoint realmente escuta é um endereço de rede privado.

Você pode especificar um endereço de escuta personalizado usando código ou configuração:

  • No código, especifique um endereço de escuta personalizado adicionando uma classe ClientViaBehavior na coleção de comportamentos do ponto de extremidade.

  • Na configuração, especifique um endereço de escuta personalizado com o atributo ListenUri do elemento <ponto de extremidade> do serviço.

Filtro de endereço SOAP personalizado

O Uri é usado em conjunto com qualquer propriedade Headers para definir o filtro de endereço SOAP de um ponto de extremidade (AddressFilter). Por padrão, esse filtro verifica se uma mensagem de entrada tem um To cabeçalho de mensagem que corresponde ao URI do ponto de extremidade e que todos os cabeçalhos de ponto de extremidade necessários estão presentes na mensagem.

Em alguns cenários, um endpoint recebe todas as mensagens que chegam no meio de transporte subjacente, e não apenas aquelas com o cabeçalho apropriado To. Para habilitar isso, o usuário pode usar a MatchAllMessageFilter classe.

Consulte também