Partilhar via


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 endpoint é representado na rede como uma referência EPR (Endpoint Reference) WS-Addressing.

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 endpoint num ficheiro de configuração, use o <endpoint> element. 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. 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 endpoint.

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 anfitrião

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. Especificar o prefixo resulta em que apenas o endereço base correspondente para esse esquema seja transmitido.

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 caracteres universais.

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 Suportar Várias Ligações de Sites do IIS e MultipleSiteBindingsEnabled.

Extensão do 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 o endpoint espera como 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 pelo via é o local para o qual uma mensagem deve ser enviada inicialmente, a caminho de 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 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

Pode definir o endereço de escuta para um valor diferente do URI do ponto final. 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 endpoint efetivamente ouve é 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 atributo ListenUri do elemento de serviço ponto de extremidade<>.

Filtro de endereço SOAP personalizado

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 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 na camada 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.

Ver também