서버 쪽 서비스 작업
이 섹션에서는 서비스 쪽 서비스 작업에 대해 설명합니다.
다음은 서버 쪽 서비스 작업의 레이아웃입니다.
- const WS_OPERATION_CONTEXT* 컨텍스트: 작업 컨텍스트입니다.
- 서비스 작업 매개 변수: 서비스 작업과 관련된 매개 변수입니다.
- const WS_ASYNC_CONTEXT* asyncContext: 비동기적으로 서비스 작업을 실행하기 위한 비동기 컨텍스트입니다.
- WS_ERROR* 오류: 서식 있는 오류 개체입니다.
HRESULT CALLBACK Add(const WS_OPERATION_CONTEXT* context,
ULONG a, ULONG b, ULONG* result,
const WS_ASYNC_CONTEXT* asyncContext,
WS_ERROR* error)
{
*result = a +b;
return NOERROR;
}
오류 및 오류 처리
서버 쪽에서는 오류를 사용하여 클라이언트에 오류 조건을 제공해야 합니다. 이렇게 하려면 실패한 HRESULT를 반환하고 오류 개체에 오류를 포함할 수 있습니다.
오류 개체에 오류가 설정되어 있지 않고 오류 HRESULT가 반환되면 인프라는 클라이언트에 오류를 다시 전달하려고 시도합니다. 이러한 경우 클라이언트에 공개되는 세부 정보 수준은 서비스 호스트의 WS_SERVICE_PROPERTY_FAULT_DISCLOSURE 서비스 속성에 의해 제어됩니다.
통화 완료
동기 서버 쪽 서비스 작업에 대한 호출은 제어를 서비스 호스트에 다시 반환할 때 완료된 것으로 전해집니다. 비동기 서비스 작업의 경우 서비스 작업 구현에서 콜백 알림이 실행되면 호출이 완료된 것으로 간주됩니다.
통화 수명
수명에 대한 서버 쪽 서비스 작업을 구현할 때는 특별히 주의해야 합니다. 호출의 수명은 서비스 호스트가 종료하는 데 걸리는 시간에 큰 영향을 줄 수 있습니다.
일부 IO 바인딩된 작업으로 인해 서버 쪽 서비스 작업을 차단해야 하는 경우 서비스 호스트가 중단되거나 클라이언트가 기본 연결을 닫을 때 알림을 받도록 취소 콜백을 등록하는 것이 좋습니다.
서버 쪽 서비스 작업 및 메모리 고려 사항
서비스 작업에서 나가는 매개 변수에 메모리를 할당해야 하는 경우 WS_OPERATION_CONTEXT 통해 사용할 수 있는 WS_HEAP 개체를 사용해야 합니다.
예: 서비스 작업 및 WS_HEAP
HRESULT CALLBACK ProcessOrder (const WS_OPERATION_CONTEXT* context, const ULONG orderNumber, OrderReceipt** orderReceipt, const WS_ASYNC_CONTEXT* asyncContext, WS_ERROR* error)
{
WS_HEAP* heap;
HRESULT hr = WsGetOperationContextProperty (context, WS_OPERATION_CONTEXT_PROPERTY_HEAP, &heap, sizeof(heap), NULL, error);
if (FAILED(hr))
return hr;
hr = WsAlloc(heap, sizeof (OrderReceipt), orderReceipt, error);
if (FAILED(hr))
return hr;
hr = FillInReceipt(*orderReceipt);
if (FAILED(hr))
return hr;
return NOERROR;
}
반환 값
- WS_S_ASYNC: 호출이 비동기화됩니다.
- WS_S_END: 호출이 성공적으로 완료되었습니다. 서버는 이 호출 이후 클라이언트의 WS_MESSAGE 기대하지 않습니다. 다른 WS_MESSAGE 들어오는 경우 서버는 채널을 중단해야 합니다.
- NOERROR/기타 모든 성공 HRESULTS: 호출이 성공적으로 완료되었습니다. 서비스 작업을 성공적으로 완료하려면 애플리케이션이 NOERROR 이외의 HRESULT를 반환하지 않는 것이 좋습니다.
- 오류 HRESULT가 있는 모든 항목: WS_ERROR 사용할 수 있는 경우 오류가 클라이언트로 다시 전송됩니다. 그렇지 않으면 제네릭 오류가 클라이언트로 다시 전송됩니다. 위의 오류 토론을 참조하세요.
통화 취소를 참조하세요.