2012-08-23 8 views
11

Pobrałem wydania stabilnego reaktywnych Rozszerzenia v1.0 SP1 z tej strony http://msdn.microsoft.com/en-us/data/gg577610, i używam go w środowisku .NET Framework 3.5 (Visual Studio 2008)Dlaczego rozszerzenia reaktywne wysyłają HTTP GET do aplikacji microsoft w trakcie kompilacji?

Próbowałem za pomocą reaktywnych Rozszerzenia w projekcie, a zauważyłem, że uruchomienie było bardzo powolne. Zamiar LINQPad, wszedłem na poniższy "C# wyrażenie":

(new int[0]).ToObservable() 

ja również odwołuje System.Reactive.dll i zaimportowano nazw System.Reactive.Linq. Po uruchomieniu trwa kompilacja , aby skompilować .

Otworzyłem Monitor procesu i monitorowałem LinqPad. Zauważyłem, że wysyła on żądanie HTTP do 124.155.222.226 LUB 124.155.22.59. (FYI LinqPad się również telefon do domu do 157.55.161.150 po otwarciu go). Z WireShark, zauważyłem, że jest wysłanie żądania HTTP GET do

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

Czy ktoś wie dlaczego to dzwoniąc do domu tak, gdy kod kompiluje z Reactive.Extensions? Co więcej, czy jest jakiś sposób, aby go wyłączyć, ponieważ 12-sekundowe opóźnienie w telefonie do domu po przeniesieniu aplikacji (I uruchomiony w produkcji) jest szczególnie niewygodne.

UWAGA: Telefonuje w ten sposób, gdy SKRABISZ kod (lub JIT kompiluje go podczas debugowania). Wydaje się, że to nie jest zachowanie w czasie wykonywania.

+4

CRL - lista odwołań certyfikatów. Wydaje się, że w jakiś sposób sprawdza certyfikat i potrzebuje najnowszej wersji tej listy odwołania, aby sprawdzić, czy certyfikat jest nadal ważny. –

+0

Ale dlaczego trzeba sprawdzić, czy certyfikat jest ważny tylko po to, aby skompilować kod zawierający IObservable ? Wydaje się, że to zły czas i miejsce na wysyłanie żądań HTTP. –

+0

Somebody jab @ericlippert – Will

Odpowiedz

7

Wygląda na to, że zespół Rx jest podpisany przy użyciu Authenticode. IMO, jest błędem dla zespołów znaków .NET opartych na Authenticode, zbudowanych dla Framework 3.5 lub wcześniejszych - ponieważ CLR sprawdza listę odwołań certyfikatów przed przeczytaniem złożenia, opóźniając wszystko co najwyżej o kilka sekund (lub o 30 sekund w najgorszym przypadku, jeśli połączenie internetowe czas się skończył).

Ta nieprawidłowość została naprawiona w CLR 4: Sygnatury Authenticode są weryfikowane tylko na żądanie, nie za każdym razem, gdy ładujesz zespół.

(To z tego powodu, że Framework 3.5 wersja pliku wykonywalnego LINQPad nie jest Authenticode podpisany.)

Może poprosić zespół Rx rozważyć usunięcie podpisu Authenticode od 3.5 build reaktywnych zespołów (zakładając, że to rzeczywiście jest problem).

+0

To DID działa jak gdyby. Zapytałem tutaj http://social.msdn.microsoft.com/Forums/en-US/rx/thread/00c9718b-5962-42ad-b02d-f170dc91ed36 i zostało ono przekierowane do http://blogs.technet.com/b /markrussinovich/archive/2009/05/26/3244913.aspx –

Powiązane problemy