Wygląda na to, że buforowanie HttpWebRequest w WP7 jest domyślnie włączone, jak mogę je wyłączyć? Dodanie losowego adresu URL param +?? Param = "+ RND.Next (10000) działa, ale jest dość trudne i nie jestem pewien, czy zadziała ze wszystkimi serwerami.WP7 HttpWebRequest bez buforowania
Odpowiedz
Skąd wiadomo, że to telefon, a nie serwer (lub proxy między nimi), który buforuje?
Sprawdziłeś to z Fiddler2 (lub odpowiednikiem)?
Czy próbowałeś ustawić nagłówki, aby wyłączyć buforowanie?
Coś jak:
myRequest = (HttpWebRequest)WebRequest.Create(myUri);
myRequest.Headers["Cache-Control"] = "no-cache";
myRequest.Headers["Pragma"] = "no-cache";
To nie jest serwer, ponieważ ten sam URL poprawia się poprawnie na BlackBerry, IPhone i Androidzie – Janci
Zmiana nagłówków nie działa, niestety. – dethSwatch
Wpadłem na ten problem z punktem końcowym ReSTful, który opracowałem dla aplikacji WP7. Zmiana serwera w celu zapewnienia, że zwróci odpowiedź z nagłówkiem "Cache-Control" ustawionym na "brak pamięci podręcznej", rozwiązuje ten problem. – dwynne
Dodawanie liczb losowych nie jest źle i będzie działać. Użyłem Time (w wywołaniu ajax). Został umieszczony w adresie URL jak folder.
tak to działa na razie, ale nie jestem z tego zadowolony i szukam lepszego rozwiązania – Janci
z losową liczbą można uzyskać ten sam numer, ale z czasem (jak ms od północy - 1 do 86 400 000) Prawie niemożliwe. możesz nawet połączyć te dwa. czy próbowałeś z POST? –
Tak jest możliwe ... :) I spędzić jeden tydzień eksperymentu i odpowiedź jest bardzo prosta:
HttpWebRequest _webRequest = WebRequest.CreateHttp(_currentUrl);
_webRequest.AllowReadStreamBuffering = false
_webRequest.BeginGetResponse(_onDownload,
userState);
To nie rozwiązuje problemu z pamięcią podręczną. –
Nie rozwiązuje problemu + zgłasza wewnętrzny wyjątek "nie jest obsługiwany". –
Na przyszłość, to pracował dla mnie (nie mogłem użyć dodatkowego parametru zapytania z powodu wymagania projektowe):
HttpWebRequest request = HttpWebRequest.CreateHttp(url);
if (request.Headers == null)
{
request.Headers = new WebHeaderCollection();
}
request.Headers[HttpRequestHeader.IfModifiedSince] = DateTime.UtcNow.ToString();
Działa. Nie mam pojęcia dlaczego. –
@Agent_L Żądanie wygląda inaczej dla klienta HTTP WP7 – SandRock
Obserwowaliśmy to samo zachowanie w Silverlight w Chrome.
Dodajemy "?nocache=" + DateTime.Now.Ticks.ToString()
do naszych adresów URL żądań, jeśli chcemy zapobiec buforowaniu.
W przypadku HttpClient (Przenośny dla systemu Windows Phone) "Kontrola pamięci podręcznej": "brak pamięci podręcznej" po stronie serwera działa tylko czasami. I nie mogę dodać losowej wartości ciągu zapytania do wywołania RESTful api.
Rozwiązanie z @frno działa dobrze i wygląda na HttpClient:
client.DefaultRequestHeaders.IfModifiedSince = DateTime.UtcNow;
Dziękuję.
To była jedyna metoda, która działa również dla mnie. Inne nagłówki pamięci podręcznej wydają się nie mieć wpływu. –
Bardzo dobre rozwiązanie, również dla Windows 8.1 Store Uniwersalne aplikacje. – NBoymanns
To działało dla nas, od czasu do czasu rzucając 304s. –
znalazłem 3 sposoby
- Dodaj losowy ciąg kwerendy do końca swojego identyfikatora URI (myślę Guid.NewGuid()) to pozwoli uniknąć buforowanie na kliencie jako ciąg kwerendy za każdym razem będzie inaczej
string uri = "http://host.com/path?cache=" + Guid.NewGuid().ToString();
- Określ nie cache w nagłówku OutgoingResponse ciągu operacji usługi WCF:
var __request = (HttpWebRequest)WebRequest.Create(url.ToString()); if (__request.Headers == null) __request.Headers = new WebHeaderCollection(); __request.Headers.Add("Cache-Control", "no-cache");
- znacznik operacji usługi z atrybutem AspNetCacheProfile:
[AspNetCacheProfile("GetContent")] public ResultABC GetContent(string abc) { __request = (HttpWebRequest)WebRequest.Create(abc); return __request; }
i zaktualizować web.config
<system.web> <caching> <outputCache enableOutputCache="true" /> <outputCacheSettings> <outputCacheProfiles > <add name="GetContent" duration="0" noStore="true" location="Client" varyByParam="" enabled="true"/> </outputCacheProfiles> </outputCacheSettings> </caching> ... </system.web>
- 1. HttpWebRequest Limit czasu w WP7
- 2. Nie można znaleźć HttpWebRequest.GetResponse() w projekcie WP7
- 3. Jak tworzyć wiadomości bez użycia launchera i selektora w WP7?
- 4. Rozwiązania buforowania
- 5. Struktura buforowania dla .NET
- 6. Odtwarzaj HTML5 Audio natychmiast, bez czekania na zakończenie buforowania?
- 7. Jak mogę przesłać odpowiedź z WCF bez buforowania?
- 8. Unikanie 301 przekierowywania buforowania
- 9. Zrozumienie zachowania buforowania fwrite()
- 10. WP7 Zapobieganie przewijaniu ListBox
- 11. WP7 Zakup w aplikacji
- 12. wp7 poziomy przesunięcia zaznaczenie
- 13. Okno dialogowe alertu WP7
- 14. implementacja stylu czatu WP7
- 15. WP7 sposób oceny utworu
- 16. C# HttpWebRequest POST'ing failing
- 17. HttpWebRequest nie przekazuje poświadczeń
- 18. HttpWebRequest Data Header Format
- 19. Brakujące Nieruchomości w HttpWebRequest
- 20. wykonawcze HttpWebRequest asynchroniczny wzywa
- 21. HttpWebRequest Port Wyczerpanie
- 22. Uzyskiwanie odpowiedzi asynchronicznego HttpWebRequest
- 23. Get cookies z HttpWebRequest
- 24. HttpWebRequest timeout handling
- 25. HttpWebRequest obejście długi URI?
- 26. MonoDroid HttpWebRequest i WebClient niewiarygodne?
- 27. Bufor dostępu do strumienia HttpWebRequest
- 28. jak uczynić HttpWebRequest poprzez Tor
- 29. Tymczasowe wyłączanie buforowania Django
- 30. Najlepsze metody buforowania
Znaleziony problem dla tego problemu przy użyciu HttpWebRequest obiekt? bieżącą podaną odpowiedzią są wszystkie rozwiązania po stronie serwera. (z wyjątkiem sygnatury czasowej, której nie lubię) – invalidusername
Btw, dobrym parametrem jest DateTime.Now.Ticks. Zawsze się to zmieni, a jego rozmiar jest akceptowalny (przynajmniej przez pierwsze kilka dekad :-)). – invalidusername