Ekspor SSRS gagal melalui portal VPN tanpa klien: apa yang berbeda
Halaman laporan membuktikan perenderaan, bukan ekspor. Ikuti permintaan ekspor melalui portal, bandingkan header dan isi, lalu batasi pengecualian apa pun secara sempit.
Laporan terbuka di peramban, parameter dirender, dan tombol ekspor menghasilkan kesalahan, unduhan kosong, atau berkas yang ditolak dibuka oleh lembar kerja. Kombinasi itu memiliki bentuk standar. Halaman laporan yang berfungsi telah menguji perenderaan dan autentikasi, dan tidak lebih. Ekspor adalah permintaan terpisah dengan responsnya sendiri, dan melalui portal tanpa klien ia juga melewati lapisan penulisan ulang yang tidak pernah dirancang untuk unduhan berkas.
Dua jalur, satu halaman yang berfungsi
Perenderaan dan ekspor adalah operasi berbeda bahkan ketika keduanya dimulai dari tombol yang sama. Server laporan merender halaman untuk peramban dan merender ekspor melalui ekstensi keluaran lain dengan tipe kontennya sendiri dan perilaku kesalahannya sendiri, seperti yang dijelaskan dokumentasi ekspor. Portal yang meloloskan yang pertama dengan sempurna tetap dapat merusak yang kedua, karena yang kedua adalah respons yang tidak diharapkan portal untuk dilihat. Keduanya berbagi sesi dan alamat, dan hampir tidak ada lagi.
Perlakukan halaman yang berfungsi hanya sebagai bukti autentikasi dan keterjangkauan. Ia membuktikan bahwa akun dapat mencapai server laporan dan bahwa portal meneruskan HTML. Ia tidak mengatakan apa pun tentang respons berkas, header disposisi konten, atau pengalihan yang berakhir pada unduhan alih-alih dokumen.
Itulah seluruh alasan membandingkan jalur ekspor secara terpisah alih-alih menguji ulang halaman yang sudah berfungsi. Dua permintaan yang berbagi sesi tetap dua permintaan.
Tiga kondisi yang menentukan di mana ekspor putus
Tiga pertanyaan menempatkan kesalahan dengan cepat, dan setiap jawaban menunjuk pemilik yang berbeda.
Pertama, apakah laporan, akun, dan format yang sama terekspor dengan benar dari jaringan internal? Jika ya, server laporan dan perendernya baik-baik saja dan perbedaannya ada di jalur akses. Kedua, apakah respons yang gagal membawa tipe konten berkas, atau halaman HTML yang memakai ekstensi berkas? Itu memisahkan kesalahan perender dari penggantian oleh portal. Ketiga, apakah portal menulis ulang URL permintaan atau menghapus header dari respons? URL yang ditulis ulang dapat mendarat di titik akhir yang sama sekali berbeda.
Jawab ketiganya sebelum mengubah pengaturan apa pun, karena masing-masing punya obat berbeda. Kesalahan perender milik server laporan, isi yang diganti milik portal, dan header yang dihapus adalah pertanyaan kebijakan, bukan bug.
Tuliskan jawabannya. Kasus dukungan yang dibangun dari tiga baris itu bernilai sepuluh tangkapan layar.
Baca respons ekspor, bukan kode status
Status HTTP yang berhasil hanya membuktikan bahwa sesuatu menjawab permintaan. Periksa isi dan header bersama-sama, karena kegagalan yang menarik adalah respons berhasil yang membawa konten salah.
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
Dump header menunjukkan tipe konten dan setiap disposisi konten yang dikembalikan portal. Perintah file mengidentifikasi apa isi sebenarnya, dan berkas teks di tempat lembar kerja diharapkan adalah halaman masuk pengganti yang klasik. Perintah head menunjukkan cukup untuk mengenali HTML tanpa membuang seluruh laporan ke terminal.
Hapus kuki sesi dan token sebelum membagikan bagian mana pun darinya. Tangkapan ekspor yang berfungsi adalah bukti yang berguna, dan tangkapan sesi milik orang lain adalah insiden.
Batasi pengecualian pada aplikasi, bukan akun
Jika portal menulis ulang atau memblokir respons, perbaikan yang menggoda adalah mengecualikan seluruh situs atau membuat laporan anonim. Keduanya memperbaiki unduhan dan menghapus alasan portal itu ada. Pengecualian yang sempit menyebutkan satu jalur aplikasi, satu tipe konten, dan satu arah, dan tetap dapat ditinjau oleh siapa pun yang memiliki kebijakan.
Gunakan versi gateway yang benar-benar Anda jalankan dan pengaturan aplikasi yang terdokumentasi. Opsi yang pernah dijelaskan vendor sebagai membiarkan lalu lintas tidak berubah bukan instruksi umum, dan menyalinnya dari utas forum lama adalah cara pengecualian sementara menjadi arsitektur permanen.
Jika pengecualian tidak dapat dibatasi seketat itu, ekspor mungkin lebih tepat berada di jalur internal dengan metode akses berbeda alih-alih di belakang portal. Pengecualian seluruh situs adalah keputusan pemilik portal, bukan jalan pintas untuk satu laporan.
Terima ekspornya, bukan dialog Simpan
Pemeriksaan terakhir adalah berkasnya sendiri: ia terbuka, ia memuat kolom yang diharapkan, dan totalnya cocok dengan laporan yang disetujui pengguna.
Munculnya dialog Simpan bukan keberhasilan, dan berkas yang terbuka dengan peringatan perbaikan juga bukan keberhasilan. Bandingkan jumlah baris dan satu nilai yang diketahui dengan laporan di layar, karena ekspor terpotong lolos setiap uji yang hanya melihat ukuran berkas. Lalu ekspor sekali lagi, karena lapisan cache yang sekali menyajikan isi salah mungkin menyajikan yang benar pada percobaan berikutnya.
Terima alur kerja yang dibutuhkan pengguna, dan tidak kurang dari itu. Unduhan yang terbuka di aplikasi yang salah tetap merupakan ekspor yang gagal.