서비스 프록시
서비스 프록시는 서비스의 클라이언트 쪽 프록시입니다. 서비스 프록시를 사용하면 애플리케이션이 메서드 호출로 채널을 통해 메시지를 보내고 받을 수 있습니다.
서비스 프록시는 필요에 따라 생성되고, 열리고, 서비스를 호출하는 데 사용되며, 더 이상 필요하지 않을 때 닫힙니다. 또는 애플리케이션에서 서비스 프록시를 다시 사용하여 서비스 프록시를 두 번 이상 초기화하는 데 필요한 시간과 리소스 없이 동일한 서비스에 반복적으로 연결할 수 있습니다. 다음 다이어그램에서는 서비스 프록시의 가능한 상태 흐름과 한 상태에서 다른 상태로 이어지는 함수 호출 또는 이벤트를 보여 줍니다.
이러한 서비스 프록시 상태는 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. | 프록시 속성을 지정합니다. |