Selama proses produksi kami, file konten statis yang sangat besar (10 megabyte) di direktori root kadang-kadang akan dikunci oleh IIS dan tidak dapat dihapus oleh tugas bersih. Ini mungkin karena sedang aktif dilayani untuk satu atau lebih klien pada saat itu.
Proses pembuatan menghentikan situs web sebelum membersihkan via
c:\Windows\System32\inetsrv\appcmd.exe stop site http://oursite.com
Namun, ini tidak merilis file - kita harus me-restart IIS untuk mendapatkan proses untuk melepaskan kuncinya.
appcmd.exe
memungkinkan Anda untuk menjatuhkan IIS sepenuhnya; kami tidak ingin melakukan ini!
Apakah ada cara lain untuk membuat IIS melepaskan file yang terkunci, tanpa me-restart IIS? Cukup menghentikan dan memulai situs web individu jelas tidak bekerja untuk melepaskan kunci file.
Jawaban:
Ada alat-alat, seperti Process Explorer Sysinternal, yang dapat menemukan dan menutup file secara paksa, namun keadaan dan perilaku aplikasi (baik milik Anda dan, dalam hal ini, IIS) setelah melakukan ini tidak ditentukan. Beberapa tidak akan peduli, beberapa akan error dan yang lain akan crash keras.
Solusi yang benar adalah dengan mengambil pemadaman dan memungkinkan IIS untuk melepaskan kunci dan membersihkan dengan sendirinya untuk menjaga stabilitas server. Jika ini tidak memungkinkan, Anda dapat membuat situs lain di kotak yang sama, atau mengatur kotak baru dengan konten baru, dan memindahkan nama domain / IP untuk "mempromosikan" konten baru ke produksi.
sumber
Saya menggunakan alat kecil yang disebut "Menangani" untuk melakukan ini.
Anda pada dasarnya memberikan nama file yang dikunci dan memberi tahu Anda proses apa yang menggunakannya:
Kemudian Anda memberikan sakelar -c untuk menutupnya:
Anda mungkin kesulitan untuk mengerjakannya dalam skrip pembuatan tanpa program pembungkus untuk mengurai output tetapi mudah-mudahan ini akan membantu.
sumber
Saya tidak yakin apakah maksud Anda kompilasi file aspx di majelis sementara. Kami menggunakan proyek penyebaran ASP.NET , yang mengkompilasi semua file aspx / ascx sebelumnya.
Saat menyalin file biner dari folder "publikasikan" ke folder "bin", kami sementara mengaktifkan file app_offline.htm yang dihapus setelah semua rakitan disalin (hanya beberapa detik). Dengan cara ini saya tidak pernah mengalami kunci file.
EDIT:
Anda dapat mencoba mendaur ulang kumpulan aplikasi menggunakan appcmd.exe, alih-alih menghentikan situs web:
sumber
Saya mencoba ini sekarang: Rupanya mungkin ada masalah dengan penguncian file jika Anda telah mengaktifkan pengindeksan pada direktori. http://www.richard-banks.org/2008/04/how-to-fix-problems-with-locked-files.html
Ini adalah IIS 6.0 tetapi karena ini tampaknya terkait dengan OS dan bukan IIS itu mungkin merupakan akar penyebabnya.
sumber
Memproses Memantau akan membantu Anda dengan penyelidikan Anda, inilah contoh dari blog Mark ( yang orang yang menulis alat) tentang cara menemukan file pegangan.
Anda mungkin ingin mencoba alat Unlocker ini untuk mengotomatiskan pembukaan kunci Anda di tingkat pegangan file.
sumber
Bukan jawabannya, tetapi sebuah ide penyelesaian jika tidak ada cara untuk "membuka" file itu tanpa me-restart server IIS:
Bagaimana jika Anda membangun / menyebarkan ke folder kosong baru dan mengubah direktori home situs web ke folder itu? Anda harus membuat nama folder baru atau beralih di antara dua nama.
Saya tidak tahu di folder mana file itu berada. Jika tidak harus berada di folder root, Anda bisa meletakkannya di folder yang baru dibuat dan membuat direktori virtual yang menunjuk ke folder itu. Jadi Anda dapat menyimpan direktori home standar Anda untuk aplikasi tersebut.
sumber
Saya memiliki masalah yang sama. Sekarang saya beralih ke MSDeploy (Web Deploy) , dan sekarang saya dapat memperbarui situs web dengan andal tanpa menghentikan apa pun. Sebenarnya langkah ini dituliskan dalam alat pembuatan otomatis kami dan ini terjadi setiap saat tanpa masalah. Dan juga cepat.
sumber
Tentu, hentikan layanan IIS. Mungkin saya tidak mengerti sesuatu, maaf.
sumber
Catatan: bukan ahli semantik penguncian file windows
Jarrod, apakah Anda dapat mengubah nama file keluar dari jalan. Anda juga dapat membuat file baru dengan ekstensi sementara, dan kemudian mengganti namanya menjadi file saat ini.
Jika semantik penguncian file windows bekerja mirip dengan POSIX, pembaca yang memegang kunci baca saat ini pada file, harus tetap melanjutkan melayani file lama sampai mereka menutup aliran baca mereka, sementara pembaca baru akan membuka file baru.
sumber