When an X-Forwarded-For HTTP header exists, use that as the user's IP address rather than REMOTE_ADDR. When a user is behind a proxy server or load balancer, X-Forwarded-For will be their actual IP address.
Solved threading problem.

Using the built-in async functions of WebRequest don't cut it in certain
environments, namely ASP.NET. The synchronization root is the same as the
HTTP request thread, so the main ASP.NET request thred won't finish until
the WebClient is done. This is bad for client performance and even worse
when Rollbar is unavailable as it would delay responses by 20 seconds.