Catch Request/Event handler errors at dispatcher level (#1610)

* Catch Request/Event handler errors at dispatcher level

* Fix tests

* Use Exception overload of SendError

* Fix tests
This commit is contained in:
Charles Gagnon
2022-07-29 17:31:36 -07:00
committed by GitHub
parent 3294a52ad9
commit fd00114a0e
32 changed files with 1326 additions and 1921 deletions

View File

@@ -131,20 +131,29 @@ namespace Microsoft.SqlTools.Hosting.Protocol
requestMessage,
messageWriter);
TParams typedParams = default(TParams);
if (requestMessage.Contents != null)
try
{
try
TParams typedParams = default(TParams);
if (requestMessage.Contents != null)
{
typedParams = requestMessage.Contents.ToObject<TParams>();
try
{
typedParams = requestMessage.Contents.ToObject<TParams>();
}
catch (Exception ex)
{
throw new Exception($"{requestType.MethodName} : Error parsing message contents {requestMessage.Contents}", ex);
}
}
catch (Exception ex)
{
await requestContext.SendError(ex.Message);
}
}
await requestHandler(typedParams, requestContext);
await requestHandler(typedParams, requestContext);
}
catch (Exception ex)
{
Logger.Error(ex);
await requestContext.SendError(ex);
}
});
});
}
@@ -178,20 +187,27 @@ namespace Microsoft.SqlTools.Hosting.Protocol
{
var eventContext = new EventContext(messageWriter);
TParams typedParams = default(TParams);
if (eventMessage.Contents != null)
try
{
try
TParams typedParams = default(TParams);
if (eventMessage.Contents != null)
{
typedParams = eventMessage.Contents.ToObject<TParams>();
}
catch (Exception ex)
{
Logger.Write(TraceEventType.Verbose, ex.ToString());
try
{
typedParams = eventMessage.Contents.ToObject<TParams>();
}
catch (Exception ex)
{
throw new Exception($"{eventType.MethodName} : Error parsing message contents {eventMessage.Contents}", ex);
}
}
await eventHandler(typedParams, eventContext);
}
catch (Exception ex)
{
// There's nothing on the client side to send an error back to so just log the error and move on
Logger.Error(ex);
}
await eventHandler(typedParams, eventContext);
});
});
}

View File

@@ -263,6 +263,12 @@ namespace Microsoft.SqlTools.Utility
/// <param name="logMessage">The message text to be written.</param>
public static void Error(string logMessage) => Write(TraceEventType.Error, logMessage);
/// <summary>
/// Writes an exception to the log file with the Error event level
/// </summary>
/// <param name="exception"></param>
public static void Error(Exception exception) => Write(TraceEventType.Error, exception.ToString());
/// <summary>
/// Writes a message to the log file with the Critical event level
/// </summary>