Listing 9: The GenerateAppError() overridden method.
HRESULT CUltraMaxService::GenerateAppError(IWriteStream *pStream, HRESULT hr)
{
if ( !pStream ) return E_INVALIDARG;
// Format error message
if ( hr == E_FAIL )
{
hr = SoapFault(SOAP_E_SERVER, m_ErrorDesc, -1);
::SysFreeString(m_ErrorDesc);
m_ErrorDesc = NULL;
}
else
{
LPWSTR pwszMessage = NULL;
DWORD dwLen = ::FormatMessageW(FORMAT_MESSAGE_ALLOCATE_BUFFER|
FORMAT_MESSAGE_FROM_SYSTEM, NULL, hr, 0, pwszMessage, 0, NULL);
if ( !dwLen ) pwszMessage = L"Application Error";
hr = SoapFault(SOAP_E_SERVER, pwszMessage, dwLen ? dwLen : -1);
if ( dwLen ) ::LocalFree(pwszMessage);
}
return hr;
}