Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Why does Reactive Extensions send a HTTP GET to microsoft ON COMPILATION?

I downloaded the Stable release of Reactive Extensions v1.0 SP1 from this site http://msdn.microsoft.com/en-us/data/gg577610, and I am using it in a .Net Framework 3.5 environment (Visual Studio 2008)

I tried using Reactive Extensions in a project, and noticed it was very slow to start up. Going to LinqPad, I entered the following "C# Expression":

(new int[0]).ToObservable()

I also referenced System.Reactive.dll and imported the System.Reactive.Linq namespace. When I run it, it takes 12 Seconds to compile & run.

I opened Process Monitor and monitored LinqPad. I found that it is sending an HTTP request to 124.155.222.226 OR 124.155.22.59. (FYI LinqPad itself also phones home to 157.55.161.150 when you open it). With WireShark, I noticed it is sending an HTTP GET request to

http://crl.microsoft.com/pki/crl/products/MicCodSigPCA_08-31-2010.crl

Does anyone know why it is phoning home like this when code compiles with Reactive.Extensions? Furthermore, is there any way to turn it off, because a 12 second delay to phone home when devoloping the application (AND running in production) is particularlly inconvenient.

NOTE: It phones home like this when you COMPILE the code (or the JIT compiles it when debugging). It is not actually the run-time behavior that appears to be doing this.

like image 486
Matt G Avatar asked Aug 23 '12 19:08

Matt G


1 Answers

It sounds like the Rx assembly is Authenticode-signed. IMO, it's a mistake to Authenticode-sign .NET assemblies built for Framework 3.5 or earlier - because the CLR checks the certification revocation list before reading the assembly, delaying things by a few seconds at best (or 30 seconds at worst if your Internet connection times out).

This misfeature was fixed in CLR 4: Authenticode signatures are verified only on demand, not every time you load the assembly.

(It's for this reason that the Framework 3.5 version of the LINQPad executable is not Authenticode-signed.)

Maybe you could ask the Rx team to consider removing the Authenticode signature from the 3.5 build of the Reactive assemblies (assuming this is indeed the problem).

like image 155
Joe Albahari Avatar answered Oct 05 '22 02:10

Joe Albahari