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 forem 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 ilustra o diagrama anterior e o código a seguir, um proxy de serviço é criado por uma chamada para a funçãoWsCreateServiceProxy. 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 tiver sido criado, o aplicativo poderá abrir o proxy de serviço para comunicação com um serviço chamando a funçãoWsOpenServiceProxy, passando um endereço estrutura 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 diferentes contextos, consulte os seguintes tópicos:
- proxy de serviço e sessões
- de operação de serviço do
- operações de serviço do lado do cliente
- HttpCalculatorClientExample
Segurança
As seguintes considerações de design de aplicativo devem ser observadas cuidadosamente 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 básica do Perfil 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_CALLSfornece proteção contra um servidor em 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 de WS_SECURITY_DESCRIPTION usada para se comunicar com o servidor.
- Tome cuidado ao modificar de mensagens e o 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 ele 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 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. |
Manejar | 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. |