SSRS-eksport feiler gjennom en klientløs VPN-portal: hva som er annerledes
Rapportsiden beviser gjengivelse, ikke eksport. Følg eksportforespørselen gjennom portalen, sammenlign headere og body, og avgrens deretter ethvert unntak snevert.
Rapporten åpnes i nettleseren, parameterne gjengis, og eksportknappen gir en feil, en tom nedlasting eller en fil som regnearket nekter å åpne. Den kombinasjonen har en standardform. En fungerende rapportside har testet gjengivelse og autentisering og ingenting annet. Eksporten er en egen forespørsel med sitt eget svar, og gjennom en klientløs portal går den også gjennom et omskrivingslag som aldri ble designet for filnedlastinger.
To veier, én fungerende side
Gjengivelse og eksport er forskjellige operasjoner selv når de starter fra samme knapp. Rapportserveren gjengir siden for en nettleser og gjengir eksporten gjennom en annen utvidelse for utdata med sin egen innholdstype og sin egen feilatferd, slik eksportdokumentasjonen beskriver. En portal som slipper den første perfekt gjennom, kan fortsatt ødelegge den andre, fordi den andre er et svar portalen ikke forventet å se. De to deler en økt og en adresse, og nesten ingenting annet.
Behandle den fungerende siden som bevis på autentisering og tilgjengelighet bare. Den beviser at kontoen kan nå rapportserveren og at portalen videresender HTML. Den sier ingenting om filsvar, headere for innholdsplassering eller omdirigeringer som ender i en nedlasting i stedet for i et dokument.
Det er hele grunnen til å sammenligne eksportveien for seg selv i stedet for å teste den siden som allerede virker på nytt. To forespørsler som deler en økt er fortsatt to forespørsler.
Tre betingelser som avgjør hvor eksporten bryter
Tre spørsmål plasserer feilen raskt, og hvert svar peker på en annen eier.
For det første, eksporteres samme rapport, konto og format korrekt fra det interne nettverket? Hvis ja, er rapportserveren og gjengiveren i orden, og forskjellen ligger i tilgangsveien. For det andre, bærer det mislykkede svaret en filinnholdstype, eller en HTML-side med en filendelse? Det skiller en gjengiverfeil fra en erstatning fra portalen. For det tredje, skriver portalen om forespørselens URL eller fjerner den headere fra svaret? En omskrevet URL kan lande på et helt annet endepunkt.
Svar på alle tre før du endrer en innstilling, fordi hver har en forskjellig løsning. En gjengiverfeil tilhører rapportserveren, en erstattet body tilhører portalen, og en fjernet header er et policy-spørsmål og ikke en feil.
Skriv ned svarene. En støttesak bygget på de tre linjene er verdt ti skjermbilder.
Les eksportsvaret i stedet for statuskoden
En vellykket HTTP-status beviser bare at noe besvarte forespørselen. Undersøk body og headere sammen, fordi den interessante feilen er et vellykket svar med feil innhold.
curl -sS -D export.headers -o export.bin --location "https://portal.example.com/reports/export?format=xlsx"
file export.bin
head -c 300 export.bin
Headerdumpen viser innholdstypen og enhver innholdsplassering portalen returnerte. Kommandoen file identifiserer hva body faktisk er, og en tekstfil der et regneark var forventet, er den klassiske erstattede påloggingssiden. Kommandoen head viser nok til å gjenkjenne HTML uten å dumpe en hel rapport i en terminal.
Fjern øktinformasjonskapsler og tokens før du deler noe av det. Et opptak av en fungerende eksport er nyttig bevis, og et opptak av en økt som tilhører noen andre, er en hendelse.
Avgrens unntaket til applikasjonen, ikke kontoen
Hvis portalen skriver om eller blokkerer svaret, er den fristende reparasjonen å frita hele nettstedet eller gjøre rapporten anonym. Begge fikser nedlastingen og fjerner grunnen til at portalen finnes. Et snevert unntak navngir én applikasjonsvei, én innholdstype og én retning, og det forblir gjennomgåelig for den som eier policyen.
Bruk den gateway-versjonen du faktisk kjører, og dens dokumenterte applikasjonsinnstillinger. Et alternativ som en leverandør en gang beskrev som å la trafikken være uendret, er ikke en generell instruksjon, og å kopiere det fra en gammel forumtråd er hvordan et midlertidig unntak blir permanent arkitektur.
Hvis unntaket ikke kan avgrenses så snevert, hører eksporten sannsynligvis til den interne veien med en annen tilgangsmetode i stedet for bak portalen. En fritakelse for hele nettstedet er en beslutning for portaleieren, ikke en omvei for én rapport.
Godta eksporten, ikke Lagre-dialogen
Den siste kontrollen er selve filen: den åpnes, den inneholder de forventede kolonnene, og summen stemmer med rapporten brukeren godkjente.
At en Lagre-dialog vises, er ikke suksess, og en fil som åpnes med en reparasjonsadvarsel, er heller ikke suksess. Sammenlign et radantall og én kjent verdi med rapporten på skjermen, fordi en avkortet eksport består enhver test som bare ser på filstørrelse. Eksporter deretter en gang til, fordi et cachelag som én gang leverer feil body, kanskje leverer den riktige ved neste forsøk.
Godta arbeidsflyten brukeren trengte, og ingenting mindre. En nedlasting som åpnes i feil applikasjon, er fortsatt en mislykket eksport.