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 em 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 os recursos necessários para inicializar um proxy de serviço mais de uma vez. O diagrama a seguir ilustra o fluxo dos estados possíveis 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 ilustra o diagrama anterior e o código a seguir, um proxy de serviço é criado por uma chamada para a função WsCreateServiceProxy . Como parâmetros para essa chamada, o 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 foi 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 foi criado, o aplicativo pode abrir o proxy de serviço para comunicação com um serviço chamando a função WsOpenServiceProxy , passando uma estrutura de endereço que contém 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 for aberto, o aplicativo poderá usá-lo para fazer chamadas ao 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 a função 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ção WsResetServiceProxy .
hr = WsResetServiceProxy(
serviceProxy,
error);
Para obter mais informações sobre como os proxies de serviço são usados em contextos diferentes, 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 Perfil Básico 2.0 e da serialização XML. É responsabilidade do aplicativo validar os dados contidos nos parâmetros que ele 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.
- Tome cuidado ao modificar os padrões de mensagem e canal 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 de API estão relacionados a proxies de serviço.
Callback | Descrição |
---|---|
WS_PROXY_MESSAGE_CALLBACK | Invocado quando os cabeçalhos da mensagem de entrada estão prestes a ser enviados por meio ou quando um cabeçalho de mensagem de saída é recebido. |
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 | Somente 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. |
Handle | 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 de chamada. |
WS_PROXY_PROPERTY. | Especifica uma propriedade proxy. |