I've found that rarely .NET process consumes ~90% CPU. I got the dump file and I found that the problem is in Dictionary<>.FindEntry method:
I've searched for the solution and found a good article of Tess Ferrandez, explaining the situation - http://blogs.msdn.com/b/tess/archive/2009/12/21/high-cpu-in-net-app-using-a-static-generic-dictionary.aspx
It seems that all access to static Dictionary classes should be synchronized. I've added lock statements in the TransportFactory class to all appropriate places.