Vid flytt av en gammal asp-applikation till en ny windows 2003-server så slutade filuppladdning att fungera. Men inte alltid, utan bara ibland. Kunden klagade över att PDF:er inte gick att ladda upp, vilket har gått utmärkt förut. Sen kom fler supportsamtal och det visade sig att det var lite olika vad som gick och inte gick att ladda upp.
Felmeddelandet jag fick var: Request.BinaryRead Failed
Efter lite sökning på Google så visar det sig att det finns en fil som heter metabase.xml som ligger i katalog C:\windows\system32\inetsrv\ som har ett defaultvärde:
AspMaxRequestEntityAllowed = "204800"
Den begränsar alltså storleken på filer som IIS:en accepterar för upload. ~205KB är inte mycket så de dokument som råkade vara större genererade alltså felmeddelandet i min gamla asp-applikation.
Det är alltså bara att leta reda på metabase.xml och ändra värdet till något mer rimligt värde, jag satte 8MB som gräns i mitt fall, sen kan man ju begränsa nedåt i själva webbapplikationen om man vill vara mer restriktiv än metabase.xml. Som jag förstått det så går det inte att overrida denna variabel med något i web.config eller system.config eller liknande och om du använder en extern uploadkomponent som får din applikations requestobjekt så är den utsatt för samma begränsningar.
OBS. Om det inte går att spara metabase.xml efter ändringen så kan det bero på att Enable Direct Metabase Edit inte är ikryssad på IIS-servern.
Starta i så fall Internet Information Manager, högerklicka på den berörda servern och välj Properties... I dialogrutan som kommer upp kryssar du i Enable Direct Metabase Edit och klickar sedan OK. Efter det ska det gå att spara metabase.xml.
OBS #2. Om det inte är en driftserver med en massa publika siter på så går det ju att stoppa IIS-servern och sedan ändra i metabase.xml och sedan starta servern igen istället för att kryssa i ovanstående ruta.