Exception Handling and Logging in SignalR
SignalR
8 Articles
In this article, let's learn about Exception Handling
and Logging
in SignalR
.
Note: If you have not done so already, I recommend you read the article on Message Pack Hub Protocol and Keep Alive in SignalR.
Table of Contents
Introduction
In our previous article we about what are Message Pack Hub Protocol
and
Keep Alive
and how to configure them. Today in this article, lets learn about how to handle errors and log them
in SignalR
. We will also see how to log messages
that are sent and received
through the SignalR connection
. This is useful for debugging
and
monitoring
the communication
between the client
.
Exception Handling and Logging
What happens when a hub method
is invoked and an exception
occurs? So when
an exception occurs on the server, the connection will not close
. The only thing the hub do is
send a message to the client that something went wrong
.
The client library will detect that and throw the error
.
Code Sample - Standard Exception
And to see the exception message, there are two possible solutions. Instead of throwing a standard exception
,
you could throw
a HubException
. Now, the message is visible. This is usable
when you deliberately want to send an exception message
to the client, for example, a
data validation error
. SignalR will also throw HubExceptions itself when something goes wrong.
Code Sample - Hub Exception
All exceptions that are not HubExceptions
thrown on the server will not contain the exception message. But if
you always want that message, no matter which exception is thrown, in Program.cs
where
SignalR
is added to DI
. Note
that just the Exception message
is sent to the client, not the stack trace
or other exception information. You should be careful turning on EnabledDetailedErrors
because this information
could also reveal possible attack vectors to your application. Therefore, I recommend not turning this on in production
.
Code Sample - SignalR Exception Configuration
To see more logs, Microsoft.AspNetCore.SignalR
category is about all activity of hubs
like invoking methods. You can also set Microsoft.AspNetCore.Http.Connections
to get
logging around transports
such as which transport was selected and activity around the selected transport.
Summary
In this article, we learnt about Exception Handling
and Logging
in SignalR. We also saw how to handle exception as Hub Exception
. In the next article, we will learn
about Streaming
and Authentication & Authorization
in SignalR.