Proxy de serviço
Um proxy de serviço é o proxy do lado do cliente para um serviço. O proxy de serviço permite que os aplicativos enviem e recebam mensagens através de um canal como chamadas de método.
Os proxies de serviço são criados conforme necessário, abertos, usados para chamar um serviço e fechados quando não são mais necessários. Como alternativa, um aplicativo pode reutilizar um proxy de serviço para se conectar repetidamente ao mesmo serviço sem o gasto de tempo e recursos necessários para inicializar um proxy de serviço mais de uma vez. O diagrama a seguir ilustra o fluxo dos possíveis estados do proxy de serviço e as chamadas de função ou eventos que levam de um estado para outro.
Esses estados de proxy de serviço são enumerados na enumeração WS_SERVICE_PROXY_STATE.
Como o diagrama anterior e o código a seguir ilustram, um proxy de serviço é criado por uma chamada para a funçãoWsCreateServiceProxy. Como parâmetros para esta chamada, WWSAPI fornece as seguintes enumerações:
Ele também aceita parâmetros opcionais usando os seguintes tipos de dados:
Quando o proxy de serviço tiver sido criado, a função WsCreateServiceProxy retorna uma referência ao proxy de serviço, WS_SERVICE_PROXY, por meio de um parâmetro out.
WS_SERVICE_PROXY* serviceProxy = NULL;
hr = WsCreateServiceProxy (
WS_TCP_CHANNEL_BINDING,
WS_CHANNEL_TYPE_DUPLEX_SESSION,
NULL,
NULL,
0,
NULL,
0,
&serviceProxy,
error);
Quando o proxy de serviço tiver sido criado, o aplicativo poderá abrir o proxy de serviço para comunicação com um serviço chamando a função deWsOpenServiceProxy, passando um endereço estrutura contendo o endereço de rede do ponto de extremidade de serviço ao qual se conectar.
WS_ENDPOINT_ADDRESS address = {0};
address.uri.chars = "net.tcp://localhost/example";
address.uri.length = wcslen("net.tcp://localhost/example";);
hr = WsOpenServiceProxy(serviceProxy, &address, NULL, error);
Quando o proxy de serviço tiver sido aberto, o aplicativo poderá usá-lo para fazer chamadas para o serviço.
hr = Add(
serviceProxy,
1,
2,
&result,
NULL,
0,
NULL,
error);
Quando o aplicativo não precisa mais do proxy de serviço, ele fecha o proxy de serviço chamando o função de WsCloseServiceProxy. Ele também libera a memória associada chamando WsFreeServiceProxy.
hr = WsCloseServiceProxy(
serviceProxy,
NULL,
error);
hr = WsFreeServiceProxy(
serviceProxy,
error);
Reutilizando o proxy de serviço
Como alternativa, depois de chamar WsCloseServiceProxy um aplicativo pode reutilizar o proxy de serviço chamando a funçãoWsResetServiceProxy.
hr = WsResetServiceProxy(
serviceProxy,
error);
Para obter mais informações sobre como os proxies de serviço são usados em diferentes contextos, consulte os seguintes tópicos:
- Proxy de Serviço e Sessões
- Operação de Serviço
- Operações de serviço do lado do cliente
- HttpCalculatorClientExample
Segurança
As seguintes considerações de design de aplicativo devem ser cuidadosamente observadas quando você usa a API de proxy de serviço WWSAPI:
- O proxy de serviço não executará nenhuma validação dos dados além da validação do Basic Profile 2.0 e da serialização XML. É da responsabilidade da aplicação validar os dados contidos nos parâmetros que recebe de volta como parte da chamada.
- Configurar o número máximo de chamadas pendentes no proxy de serviço, usando o valor de enumeração WS_PROXY_PROPERTY_IDWS_PROXY_PROPERTY_MAX_PENDING_CALLS, fornece proteção contra um servidor de execução lenta. O máximo padrão é 100. Os aplicativos devem ter cuidado ao modificar os padrões.
- O proxy de serviço não fornece garantias de segurança além daquelas especificadas na estrutura WS_SECURITY_DESCRIPTION usada para se comunicar com o servidor.
- Tenha cuidado ao modificar de mensagens e canal padrões no proxy de serviço. Leia as considerações de segurança associadas a mensagens e canais antes de modificar qualquer uma das propriedades relacionadas.
- O proxy de serviço criptografa todas as credenciais que mantém na memória.
Os seguintes elementos da API estão relacionados a proxies de serviço.
Retorno de chamada | Descrição |
---|---|
WS_PROXY_MESSAGE_CALLBACK | Invocado quando os cabeçalhos da mensagem de entrada estão prestes a ser enviados ou quando os cabeçalhos de uma mensagem de saída acabam de ser recebidos. |
Enumeração | Descrição |
---|---|
WS_CALL_PROPERTY_ID | Enumera parâmetros opcionais para configurar uma chamada em uma operação de serviço do lado do cliente. |
WS_PROXY_PROPERTY_ID | Enumera parâmetros opcionais para configurar o proxy de serviço. |
WS_SERVICE_PROXY_STATE | O estado do proxy de serviço. |
Função | Descrição |
---|---|
WsAbandonCall | Abandona uma chamada especificada em um proxy de serviço especificado. |
WsAbortServiceProxy | Cancela todas as entradas e saídas pendentes em um proxy de serviço especificado. |
WsCall | Apenas interno. Serializa argumentos em uma mensagem e a envia pelo canal. |
WsCloseServiceProxy | Fecha um proxy de serviço para comunicação. |
WsCreateServiceProxy | Cria um proxy de serviço. |
WsFreeServiceProxy | Libera a memória associada a um proxy de serviço. |
WsGetServiceProxyProperty | Recupera uma propriedade de proxy de serviço especificada. |
WsOpenServiceProxy | Abre um proxy de serviço para um ponto de extremidade de serviço. |
WsResetServiceProxy | Redefine o proxy de serviço. |
Pega | Descrição |
---|---|
WS_SERVICE_PROXY | Um tipo opaco usado para fazer referência a um proxy de serviço. |
Estrutura | Descrição |
---|---|
WS_CALL_PROPERTY | Especifica uma propriedade call. |
WS_PROXY_PROPERTY. | Especifica uma propriedade proxy. |