I have this code I’m starting to work on:
function VSDSService.ValidateLogin: VSDSLoginToken;
begin
result := new VSDSLoginToken;
try
var username := WebOperationContext.Current.IncomingRequest.Headers["username"];
var password := WebOperationContext.Current.IncomingRequest.Headers["password"];
result.Token := 'got a token';
raise new WebFaultException<String>(String.Format("Authentication exception", "User not authenticated"), System.Net.HttpStatusCode.Unauthorized);
except
on E: WebFaultException do begin
result.Error := new VSDSLoginError;
result.Error.Message := E.Message;
result.Error.StackTrace := E.StackTrace;
result.Error.InnerException := E.InnerException;
EventLog.WriteEntry( 'VsdsRest',
'Error in ValidateLogin at ' + DateTime.Now.ToString + Environment.NewLine + Environment.NewLine +
'Message: ' + E.Message + Environment.NewLine + Environment.NewLine +
'Stack Trace: ' + E.StackTrace + Environment.NewLine + Environment.NewLine +
'InnerException: ' + E.InnerException:Message,
EventLogEntryType.Error,
65535 );
raise;
exit;
end;
on E: Exception do begin
result.Error := new VSDSLoginError;
result.Error.Message := E.Message;
result.Error.StackTrace := E.StackTrace;
result.Error.InnerException := E.InnerException;
EventLog.WriteEntry( 'VsdsRest',
'Error in ValidateLogin at ' + DateTime.Now.ToString + Environment.NewLine + Environment.NewLine +
'Message: ' + E.Message + Environment.NewLine + Environment.NewLine +
'Stack Trace: ' + E.StackTrace + Environment.NewLine + Environment.NewLine +
'InnerException: ' + E.InnerException:Message,
EventLogEntryType.Error,
65535 );
end;
end;
end;
I expected the first On block to be entered and the result would be filled in and then the exception would be reraised. But the debugger shows it going directly to the exit statement. And the client does not see a 401 from the raise trying to reraise the exception.
Oxygene versions is 8.3.95.2031