서비스 프록시

서비스 프록시는 서비스의 클라이언트 쪽 프록시입니다. 서비스 프록시를 사용하면 애플리케이션이 메서드 호출로 채널을 통해 메시지를 보내고 받을 수 있습니다.

서비스 프록시는 필요에 따라 생성되고, 열리고, 서비스를 호출하는 데 사용되며, 더 이상 필요하지 않을 때 닫힙니다. 또는 애플리케이션에서 서비스 프록시를 다시 사용하여 서비스 프록시를 두 번 이상 초기화하는 데 필요한 시간과 리소스 없이 동일한 서비스에 반복적으로 연결할 수 있습니다. 다음 다이어그램에서는 서비스 프록시의 가능한 상태 흐름과 한 상태에서 다른 상태로 이어지는 함수 호출 또는 이벤트를 보여 줍니다.

서비스 프록시 상태와 한 상태에서 다른 상태로 이어지는 함수 호출 또는 이벤트를 보여 주는 다이어그램

이러한 서비스 프록시 상태는 WS_SERVICE_PROXY_STATE 열거형에 열거됩니다.

앞의 다이어그램과 다음 코드에서 알 수 있듯이 WsCreateServiceProxy 함수를 호출하여 서비스 프록시를 만듭니다. 이 호출에 대한 매개 변수로 WWSAPI는 다음 열거형을 제공합니다.

또한 다음 데이터 형식을 사용하여 선택적 매개 변수를 허용합니다.

서비스 프록시가 만들어지면 WsCreateServiceProxy 함수는 out 매개 변수를 통해 WS_SERVICE_PROXY 서비스 프록시에 대한 참조를 반환합니다.

WS_SERVICE_PROXY* serviceProxy = NULL;
hr = WsCreateServiceProxy (
    WS_TCP_CHANNEL_BINDING, 
    WS_CHANNEL_TYPE_DUPLEX_SESSION, 
    NULL, 
    NULL, 
    0, 
    NULL,
    0,
    &serviceProxy, 
    error);

서비스 프록시가 만들어지면 애플리케이션은 WsOpenServiceProxy 함수를 호출하고 연결할 서비스 엔드포인트의 네트워크 주소가 포함된 주소 구조를 전달하여 서비스 통신을 위해 서비스 프록시를 열 수 있습니다.

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);

서비스 프록시를 열면 애플리케이션에서 서비스 호출에 사용할 수 있습니다.

hr = Add(
    serviceProxy, 
    1, 
    2, 
    &result, 
    NULL, 
    0, 
    NULL, 
    error);

애플리케이션에 더 이상 서비스 프록시가 필요하지 않으면 WsCloseServiceProxy 함수를 호출하여 서비스 프록시를 닫습니다. 또한 WsFreeServiceProxy를 호출하여 연결된 메모리를 해제합니다.

hr = WsCloseServiceProxy(
    serviceProxy, 
    NULL, 
    error);
hr = WsFreeServiceProxy(
    serviceProxy, 
    error);

서비스 프록시 다시 사용

또는 WsCloseServiceProxy 를 호출한 후 애플리케이션은 WsResetServiceProxy 함수를 호출하여 서비스 프록시를 다시 사용할 수 있습니다.

hr = WsResetServiceProxy(
    serviceProxy, 
    error);

다양한 컨텍스트에서 서비스 프록시를 사용하는 방법에 대한 자세한 내용은 다음 topics 참조하세요.

보안

WWSAPI 서비스 프록시 API를 사용할 때는 다음과 같은 애플리케이션 디자인 고려 사항을 신중하게 고려해야 합니다.

  • 서비스 프록시는 기본 프로필 2.0 유효성 검사 및 XML serialization 이외의 데이터에 대한 유효성 검사를 수행하지 않습니다. 호출의 일부로 다시 수신하는 매개 변수에 포함된 데이터의 유효성을 검사하는 것은 애플리케이션의 책임입니다.
  • WS_PROXY_PROPERTY_MAX_PENDING_CALLS WS_PROXY_PROPERTY_ID거형 값을 사용하여 서비스 프록시에서 보류 중인 최대 호출 수를 구성하면 실행 속도가 느린 서버에 대한 보호가 제공됩니다. 기본 최대값은 100입니다. 애플리케이션은 기본값을 수정하는 데 주의해야 합니다.
  • 서비스 프록시는 서버와 통신하는 데 사용되는 WS_SECURITY_DESCRIPTION 구조에 지정된 것 이상의 보안 보장을 제공하지 않습니다.
  • 서비스 프록시에서 메시지채널 기본값을 수정할 때는 주의해야 합니다. 관련 속성을 수정하기 전에 메시지 및 채널과 관련된 보안 고려 사항을 읽어보십시오.
  • 서비스 프록시는 메모리에 유지되는 모든 자격 증명을 암호화합니다.

다음 API 요소는 서비스 프록시와 관련이 있습니다.

콜백 설명
WS_PROXY_MESSAGE_CALLBACK 입력 메시지의 헤더가 전송될 때 또는 출력 메시지 헤더가 방금 수신될 때 호출됩니다.

 

열거형 설명
WS_CALL_PROPERTY_ID 클라이언트 쪽 서비스 작업에서 호출을 구성하기 위한 선택적 매개 변수를 열거합니다.
WS_PROXY_PROPERTY_ID 서비스 프록시를 구성하기 위한 선택적 매개 변수를 열거합니다.
WS_SERVICE_PROXY_STATE 서비스 프록시의 상태입니다.

 

함수 Description
WsAbandonCall 지정된 서비스 프록시에서 지정된 호출을 중단합니다.
WsAbortServiceProxy 지정된 서비스 프록시에서 보류 중인 모든 입력 및 출력을 취소합니다.
WsCall 내부 전용입니다. 인수를 메시지로 직렬화하고 채널을 통해 보냅니다.
WsCloseServiceProxy 통신을 위해 서비스 프록시를 닫습니다.
WsCreateServiceProxy 서비스 프록시를 만듭니다.
WsFreeServiceProxy 서비스 프록시와 연결된 메모리를 해제합니다.
WsGetServiceProxyProperty 지정된 서비스 프록시 속성을 검색합니다.
WsOpenServiceProxy 서비스 엔드포인트에 대한 서비스 프록시를 엽니다.
WsResetServiceProxy 서비스 프록시를 다시 설정합니다.

 

Handle 설명
WS_SERVICE_PROXY 서비스 프록시를 참조하는 데 사용되는 불투명 형식입니다.

 

구조체 설명
WS_CALL_PROPERTY 호출 속성을 지정합니다.
WS_PROXY_PROPERTY. 프록시 속성을 지정합니다.