2013-04-23 6 views
9

मैं माइक्रोसॉफ्ट की वेब परिनियोजन रिमोट एजेंट सेवा का उपयोग कर रहा हूं ताकि मुझे विजुअल स्टूडियो के भीतर सर्वर को आसानी से कोड प्रकाशित करने की अनुमति मिल सके।उपयोग में फ़ाइल के कारण वेब परिनियोजन विफल रहा

जिस वेबसाइट पर मैं तैनाती कर रहा हूं, लॉग फाइलों को लॉग इन करने के लिए लॉग लॉग करने के लिए लॉग 4नेट का उपयोग कर रहा है, और हर बार जब मैं कोड का एक नया संस्करण तैनात करने का प्रयास करता हूं, तो मुझे यह त्रुटि विजुअल स्टूडियो में मिलती है जिसमें कहा गया है कि वर्तमान लॉग 4नेट लॉग फ़ाइल है उपयोग करें:

रिमोट कंप्यूटर पर अनुरोध संसाधित होने पर एक त्रुटि हुई। फ़ाइल 'Web.log' उपयोग में है।

प्रक्रिया 'सी: \ inetpub \ wwwroot \ logs \ Web.log' तक नहीं पहुंच सकती है क्योंकि यह किसी अन्य प्रक्रिया द्वारा उपयोग की जा रही है।

मैं सर्वर पर जा रहा है और प्रकाशित करने से पहले एक iisreset करके इस का समाधान कर सकते हैं ... लेकिन यह है कि दृश्य स्टूडियो :)

से वे आसान प्रकाशन की बात को हराने की तरह है वहाँ कुछ रास्ता है मैं प्रकाशित कार्य को स्वचालित रूप से iisreset जारी करने के लिए प्राप्त कर सकता हूं, या किसी अन्य तरीके से मैं इस पर काम कर सकता हूं?

+0

क्या यह आपकी लॉग 4नेट लॉग फ़ाइल है? – Tommy

+0

@ टॉमी हाँ, क्षमा करें, मुझे यह स्पष्ट करना चाहिए :) – Cocowalla

+0

मुझे आश्चर्य है कि क्या आप अपने global.asax में Application_End ईवेंट में जुड़ सकते हैं और log4Net के लिए शटडाउन विकल्प को कॉल कर सकते हैं। यह फ़ाइल पर ताला मुक्त करना चाहिए। मुझे ऐसा करने की ज़रूरत नहीं है, इस प्रकार उत्तर के रूप में पोस्ट नहीं किया गया है, लेकिन कुछ अन्य कारणों से लॉगिंग सेवा को बंद करने से संबंधित कुछ SO प्रश्न और अन्य आइटम हैं। – Tommy

उत्तर

9

मैंने चारों ओर पोकिंग रखी और कुछ अन्य मंचों में लॉक होने वाली फाइल के चारों ओर कुछ टिड्बिट्स पाई। आप web.config फ़ाइल में

<lockingModel type="log4net.Appender.FileAppender+MinimalLock" /> 

जोड़ने अपने <appender> तत्व करने के लिए प्रयास किया है? से Apache docs

प्रत्येक AcquireLock/ReleaseLock चक्र के लिए एक बार फ़ाइल खोलता है, इस तरह समय के कम से कम राशि के लिए ताला पकड़े। लॉकिंग की यह विधि FileAppender की तुलना में काफी धीमी है। एक्सक्लूसिव लॉक लेकिन लॉगिंग करते समय अन्य प्रक्रियाओं को लॉग फ़ाइल को स्थानांतरित/हटाने की अनुमति देता है।

जहां तक ​​प्रदर्शन विचार, मैं तुम्हें परीक्षण करने के लिए अगर यह आप को प्रभावित करेगा या नहीं होगा के रूप में मैं यह सोचते हैं रहा हूँ यह वास्तव में कितनी बार आप के रूप में लॉग फ़ाइल के लिए लिख रहे पर निर्भर करता है की आवश्यकता होगी लगता है के रूप में कितना इस वसीयत प्रभाव प्रदर्शन। मुझे विश्वास नहीं है कि लॉक प्राप्त करने/रिलीज़ करने से सभी अधिक समय लग सकता है।

6

MSDEPLOY provider called recycleApp है जिसका उपयोग इस के लिए बिल्कुल किया जाता है। आप इसे अपने परिनियोजन मैनिफेस्ट में शामिल कर सकते हैं।

एक और विकल्प ignoreOnErrors ध्वज का उपयोग करना है जो फ़ाइल को उपयोग में छोड़ देगा और तैनाती के साथ जारी रहेगा।

+0

क्या आप रीसायकल ऐप पर कुछ जानकारी दे सकते हैं और वास्तव में इसे कैसे शामिल कर सकते हैं?मुझे विजुअल स्टूडियो में कोई विकल्प नहीं दिखता है, अनदेखा करने के लिए, अनइंटर ध्वज – Cocowalla

+0

आप इस कमांड को मैन्युअल रूप से प्री-डिप्लॉयमेंट चरण के रूप में चला सकते हैं या वीएस परिनियोजन चरण का उपयोग करके स्वचालित कर सकते हैं - चेक आउट करें ['आफ्टरटेक्शंस =" CopyAllFilesToSingleFolderForPackage "'] (http: //stackoverflow.com/a/12579589)। वीएस में अभी तक एक विकल्प नहीं है कि इसे ऐप रीसायकल करने के लिए कहें - केवल फाइल + एसक्यूएल प्रकाशित विकल्प। – SliverNinja

संबंधित मुद्दे