2008-10-21 16 views
9

Mam niezłą kontrolę przesyłania plików, którą napisałem dla formularzy sieci ASP.NET, które wykorzystują IFrame i ASP.NET AJAX.Zapobieganie przekroczeniu limitu czasu przeglądarki przy przesyłaniu dużych plików

Jednak przy przesyłaniu dużych plików przeglądarka przekroczy limit czasu, zanim będzie mogła zakończyć wysyłanie formularza.

Czy istnieje sposób na zwiększenie tego?

Nie jestem interesujący w alternatywnych rozwiązaniach, więc nie sugeruj zmiany całej rzeczy. To działa dobrze dla < 5 megapładów, chciałbym tylko uzyskać do około 8mb.

EDYCJA: Ustawienie limitu czasu w Page_Load nie powoduje żadnych zmian.

Odpowiedz

2

W Page_Load, ustaw Server.ScriptTimeout na wartość, która działa dla Ciebie. Mierzyłem w sekundach, w co wierzę.

+0

Można to zrobić w faktycznym elemencie iframe, który zostanie wysłany z powrotem, prawda? – FlySwat

+0

Tak, jeśli otrzymujesz limit czasu żądania w elemencie iframe, to wtedy ustawisz Server.ScriptTimeout. – JasonS

10

Należy zaktualizować ustawienie metabazy w usługach IIS6 i nowszych. Klucz jest "AspMaxRequestEntityAllowed" i jest wyrażony w bajtach. Gorąco polecam Eksplorator Metabase, aby dokonać zmiany, brodzenie przez XML w% systemroot% \ system32 \ inetserv \ metababase.xml jest jednak możliwe.

Metabase Explorer: http://support.microsoft.com/kb/840671

Hmmm, może jestem szczekanie na złe drzewo ... nie robiłbym 5 MB plików, jeżeli nie zostało już skorygowane.

Innym stab na to: patrz swój web.config:

<system.web> 
    <httpRuntime maxRequestLength="10240" executionTimeout="360"/> 
</system.web> 

Max długość żądanie jest w kilobajtach i Timeout wykonanie jest w sekundach.

+0

maxRequestLength jest rzeczywiście w kilobajtach. Zobacz http://msdn.microsoft.com/en-us/library/e1f13641.aspx –

+0

Masz rację, w przeciwnym razie mała liczba, o której wspomnę, nie miałaby sensu. Dzięki, edytowane. – Godeke

1

myślę, że może trzeba dostosować MaxRequestLength

jej w Web.config myślę domyślnie jego 4megs.

Poniższy pozwoliłoby ~ 10 Plik meg:

<httpRuntime maxRequestLength="10240" /> 
-6

sprawdzić kod z Velodoc XP Edition. Zawiera moduł przesyłania strumieniowego, wznowiony moduł obsługi pobierania i kontrolki przesyłania ASP.NET oparte na rozszerzeniach ASP.NET Ajax i wszystko to jest open source.

Aby uzyskać więcej informacji, sprawdź także www.memba.com i www.velodoc.com.

+1

Nie odnosi się to bezpośrednio do pytania, a może to być reklama. – Odrade

+0

Witryna powiązana z obecnie nie jest używana. –

3

Place to w web.config

<system.web> 
    <httpRuntime executionTimeout="360" maxRequestLength="100000" /> 

która umożliwia drugi limit czasu 360 i 100,000 KB przesłanych danych na raz.

Jeśli to nie działa, uruchom to polecenie na serwerze IIS. (zamień nazwę [IISWsasytatania])

C:\Windows\System32\inetsrv>appcmd set config "[IISWebsitename]" -section:requestFiltering -requestLimits.maxAllowedContentLength:100000000 -commitpath:apphost 

Umożliwia to przesłanie 100 000 000 bajtów danych naraz.

+2

Dzięki! Parametr requestFiltering zrobił dla mnie sztuczkę. W IIS 7 wprowadziłem zmianę za pomocą następującej komendy: Filtrowanie żądań | Zasady | Edytuj ustawienia funkcji | Maksymalna dozwolona długość treści. – ConnorsFan

-6

I rozwiązać to za pomocą PHP z HTML:

  1. zaczynam sesję
  2. wejść pętli
  3. stworzyć pętlę, która przeładowuje strony, które wykonuje część pracy przy czasie
  4. do wykonania zadania
  5. kod wewnątrz pętli wykonuje część zadania
  6. zwiększa zmienną sesji do punktu do kolejnej części pracy
  7. odświeżyć stronę za pomocą skryptu java // to będzie ponowne uruchomienie zrywa stronie stopera
  8. pętla
  9. załadować stronę zgłosić praca jest wykonywana
1

Otwórz Web .config plik, a tuż pod tagiem <system.web> dodaj następujący tag:

<httpRuntime executionTimeout="90" maxRequestLength="4096" useFullyQualifiedRedirectUrl="false" minFreeThreads="8" minLocalRequestFreeThreads="4" appRequestQueueLimit="100" enableVersionHeader="true" />

teraz wystarczy spojrzeć pod maxRequestLength = "4096" atrybut znacznika <httpRuntime>. Jak mogłeś sobie uświadomić, wszystko, co musisz zrobić, to zmienić wartość na inną wybraną wartość (8192 dla 8 Mb, 16384 dla 16 Mb, 65536 dla 64 Mb, i tak dalej ...).

Powiązane problemy