Endereços de ponto final

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 Windows Communication Foundation (WCF) 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 alcançar 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 do 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 endereço URI 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 discriminadas da seguinte forma:

  • Esquema: http:

  • Máquina: www.fabrikam.com

  • (facultativo) 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 imperativamente usando código ou declarativamente por meio da configuração. Definir pontos de extremidade no código geralmente não é prático porque as ligações e endereços para um serviço implantado geralmente 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 ligação e endereçamento fora do código permite que eles sejam alterados sem ter que recompilar ou reimplantar o aplicativo.

Definindo um endereço na configuração

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

Definindo um endereço no código

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

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 do ponto de wsdl:port extremidade correspondente. O EPR contém o endereço do ponto de extremidade, bem como quaisquer propriedades de endereço. Para obter detalhes e um exemplo, consulte Especificando um endereço de ponto de extremidade.

Suporte a várias associações 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. Esses aplicativos normalmente são vinculados a diferentes endereços base. 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 vinculação e informações de vinculação. O protocolo de vinculação define o esquema sobre o qual a comunicação ocorre, e informações de vinculaçã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 ligação: HTTP

  • Informações de vinculação: Endereço IP, porta, cabeçalho do 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 oferecia suporte a vários endereços para um esquema e, se eles fossem especificados, lançava 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 AppDomain no arquivo de configuração. Você faz 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. A especificação do prefixo resulta apenas no endereço base correspondente para esse esquema a ser passado.

A seguir está 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 respetivos esquemas, que são passados.

O baseAddressPrefixFilter não suporta curingas.

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

Suporte a várias vinculações do IIS no .NET Framework 4 e posterior

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

A seguir está um exemplo de código de configuração que usa multipleSiteBindingsEnabled em 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 ligações de site do IIS e MultipleSiteBindingsEnabled.

Estendendo o endereçamento nos serviços WCF

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

  • Para especificar o endereço de escuta do serviço, o local no qual o ponto de extremidade escuta as mensagens,

  • Para 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 atravessa um ou mais serviços adicionais que processam a mensagem antes que ela chegue ao seu 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) que se destina ao intermediário em vez de apenas a um endereço lógico (wsa:To) que visa o destino final.

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

O endereço de transporte especificado via é o local para o qual uma mensagem deve ser enviada inicialmente a caminho de algum outro endereço remoto especificado pelo to parâmetro no qual 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 precisa fazer roteamento manual.

Endereçamento de cabeçalhos

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 alterar 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 ponto de extremidade. 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 onde o ponto de extremidade realmente escuta é um endereço de rede privada.

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 ClientViaBehavior classe à coleção de comportamento do ponto de extremidade.

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

Filtro de endereço SOAP personalizado

O Uri é usado em conjunto com qualquer Headers propriedade 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 se todos os cabeçalhos de ponto de extremidade necessários estão presentes na mensagem.

Em alguns cenários, um ponto de extremidade recebe todas as mensagens que chegam no 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