2012-08-23 9 views
11

He descargado la versión estable de extensiones reactivas SP1 v1.0 de este sitio http://msdn.microsoft.com/en-us/data/gg577610, y lo estoy usando en un entorno .Net Framework 3.5 (Visual Studio 2008)¿Por qué Reactive Extensions envía un HTTP GET a microsoft ON COMPILATION?

He intentado utilizar extensiones reactivas en un proyecto, y noté que fue muy lento para comenzar. El ir a LINQPad, entré en el siguiente "C# Expresión":

(new int[0]).ToObservable() 

también hice referencia System.Reactive.dll e importado el espacio de nombres System.Reactive.Linq. Cuando lo ejecuto, toma 12 Seconds para compilar & ejecutar.

Abrí Process Monitor y supervisé LinqPad. Encontré que está enviando una solicitud HTTP a 124.155.222.226 O 124.155.22.59. (FYI LinqPad también llama a casa a 157.55.161.150 cuando lo abres). Con WireShark, me di cuenta de que está enviando una solicitud HTTP GET a

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

¿Alguien sabe por qué está llamando a casa como ésta cuando el código se compila con Reactive.Extensions? Además, ¿hay alguna manera de desactivarlo, porque un retardo de 12 segundos para llamar a casa cuando se desarrolla la aplicación (AND en producción) es particularmente inconveniente.

NOTA: Llama a su casa de esta manera cuando COMPILA el código (o el JIT lo compila al depurar). En realidad, no es el comportamiento en tiempo de ejecución que parece estar haciendo esto.

+4

CRL - Lista de revocación de certificados. Parece que de alguna manera comprueba un certificado y necesita la versión más reciente de esa lista de revocación para saber si el certificado sigue siendo válido. –

+0

¿Pero por qué necesita comprobar si un certificado es válido simplemente para compilar el código que contiene IObservable ? Parece que es el momento y el lugar incorrectos para realizar solicitudes HTTP. –

+0

Alguien jab @ericlippert – Will

Respuesta

7

Parece que el ensamblaje Rx está firmado con Authenticode. OMI, es un error para los ensamblajes Authenticode-sign .NET creados para Framework 3.5 o anterior, porque el CLR verifica la lista de revocación de certificación antes de leer el ensamblado, retrasando las cosas por unos segundos en el mejor (o 30 segundos en el peor si su conexión a Internet se acabó el tiempo).

Esta anomalía se corrigió en CLR 4: las firmas de Authenticode se verifican solo a pedido, no cada vez que se carga el conjunto.

(Es por esta razón que el Framework versión 3.5 del ejecutable LINQPad no es Authenticode-firmado.)

Tal vez usted podría pedir al equipo de Rx a considerar la eliminación de la firma Authenticode desde el 3.5 build de los montajes de reactivos (suponiendo que este es realmente el problema).

+0

Esto funcionó, por así decirlo. Pregunté aquí http://social.msdn.microsoft.com/Forums/en-US/rx/thread/00c9718b-5962-42ad-b02d-f170dc91ed36, y fui dirigido a http://blogs.technet.com/b /markrussinovich/archive/2009/05/26/3244913.aspx –

Cuestiones relacionadas