अद्यतन
मैं शुरू से जोड़ लिया है चाहिए - यह माइक्रोसॉफ्ट डायनेमिक्स सीआरएम मेंमेरे सीआरएम वर्कफ़्लो पर अनंत लूप सुरक्षा क्यों चल रही है?
है मैं सीआरएम अच्छी तरह से पता है, लेकिन मैं एक नुकसान में हूँ मेरे वर्तमान तैनाती पर व्यवहार की व्याख्या करने के लिए ।
कृपया मेरी परिदृश्य की रूपरेखा को समझने में मेरी सहायता करें कि मेरी कौन सी धारणाएं/समझ गलत है (और इसलिए इस त्रुटि का कारण क्या है)। यह मेरी अपेक्षाओं के अनुरूप नहीं है।
बेसिक परिदृश्य
- आवश्यकता की मांग है कि एक वेब सेवा हर एक्स मिनट कहा जाता है
- मैं एक कार्यप्रवाह/कस्टम इकाई का उपयोग करने का विकल्प चुना है (यह एक डेटाबेस सूचकांक को आइटम लंबित कहते हैं) ट्रिगर मॉडल (यानी मेरे पास एक कस्टम इकाई है जिसमें एक क्रिएटिव प्लगइन पंजीकृत है। प्लगइन मेरे तर्क को निष्पादित करता है। "पूरा" समय + [टाइमआउट अवधि] समाप्त होने पर एक साथ वर्कफ़्लो प्रारंभ होता है। समाप्ति पर, यह एक नया ट्रिगर रिकॉर्ड बनाता है और वर्कफ़्लो समाप्त होता है)।
- प्लगइन तर्क ठीक काम करता है। कार्यप्रवाह अवधारणा एक बिंदु के लिए ठीक काम करता है, लेकिन समय की अवधि के बाद कार्यप्रवाह एक विफलता के साथ रुक:
इस कार्यप्रवाह काम रद्द कर दिया गया क्योंकि कार्यप्रवाह है कि यह शुरू कर दिया अनंत लूप शामिल थे। वर्कफ़्लो तर्क को सही करें और पुनः प्रयास करें। वर्कफ़्लो तर्क के बारे में जानकारी के लिए, सहायता देखें।
विशिष्ट तैनाती
सबसे पहले, मुझे लगता है कि यह काफी सुरक्षित है हमें इस परिदृश्य में प्लगइन कोड की सामग्री पर ध्यान करने के लिए। यह ठीक काम करता है, यह परमाणु है और सीआरएम को मुश्किल से छूता है (स्पष्ट होने के लिए, यह एक प्री-इवेंट प्लगइन है जो रिमोट वेब सेवा चलाता है, प्रतिक्रिया का इंतजार करता है और फिर पास होने से पहले मेरे ट्रिगर रिकॉर्ड पर "पूर्ण" तिथि/समय विशेषता सेट करता है लक्ष्य इकाई वापस पाइपलाइन में)। जब तक एक ट्रिगर रिकॉर्ड बनाया जाता है, यह कोड चलता है और जो करता है वह करता है।
प्लगइन की सामग्री रियायती करने के बाद, एक मुद्दा है कि मैं इकाई के पूर्व बनाने के कदम पर पंजीकृत प्लगइन होने में सराहना करते नहीं है हो सकता है ...
ताकि कार्यप्रवाह ही छोड़ देता है । यह एक साधारण है। यह thusly चलाता है:
- एक नया ट्रिगर इकाई के निर्माण पर ...
- यह Trigger.new_completedon + 15 मिनट टाइमआउट पर
- की एक समय समाप्ति है, यह कोई साथ (एक नया ट्रिगर रिकॉर्ड बनाता है " "मान पर पूरा - यह प्लगइन द्वारा सेट किया गया है याद रखें)
- यह सब कुछ नहीं है - कोई स्पष्ट" अंत वर्कफ़्लो "(हालांकि मैंने अभी अभी एक जोड़ा है और इसे परीक्षण सेट कर देगा ...)
इस सेट-अप के साथ, मैं मैन्युअल रूप से एक नया ट्रिगर रिकॉर्ड बना देता हूं और प्रक्रिया अच्छी तरह से क्रिया में स्पिन करती है। रोल आगे 1h 58 मिनट (मेरे द्वारा चलाए गए अंतिम चक्र के आधार पर - याद रखना कि मेरे प्लगइन कोड को चलाने के लिए एक मिनट लग सकता है), 7 सफल निष्पादन चक्र (यानी नई वर्कफ़्लो नौकरियां बनाई और पूरी की जा रही हैं) के बाद, 8 वां व्यक्ति विफल रहता है उपरोक्त त्रुटि।
क्या मैं पहले से ही पता (मुझे सही करें जहां मैं गलत हूँ)
Recursion depth, by default, is set to 8। यदि वर्कफ़्लो/प्लगइन स्वयं 8 बार कॉल करता है तो एक अनंत लूप का पता लगाया जाता है।
Recursion depth is reset every one hour (or 10 minutes - see "Warnings" in linked blog?)
Recursion depth settings can be set via PowerShell या SDK कोड ऑन-प्रिमाइसेस तैनाती केवल (via the Set-CrmSetting Cmdlet)
क्या मैं सुनने के लिए नहीं करना चाहते हैं (कृपया) में Deployment Web Serviceका उपयोग कर
"रिकर्सन गहराई सेटिंग्स बदलें"
मैं परिनियोजन रिकर्सन गहराई सेटिंग्स को बदल नहीं सकता क्योंकि यह ऑनलाइन परिदृश्य में एक विकल्प नहीं है - आखिरकार मैं सीआरएम ऑनलाइन पर भी तैनात होगा।
"अपने कार्यप्रवाह पर समय समाप्ति की अवधि बढ़ाने के लिए" यह एक विकल्प नहीं है या तो - अनुक्रमणः हर 15 मिनट में होने के लिये, आदर्श जितनी जल्दी की जरूरत है।
अद्यतन
@Boone नीचे कि प्रत्यावर्तन गहराई टाइमआउट निष्क्रियता के 60 मिनट के बजाय हर 60 मिनट के बाद रीसेट का सुझाव दिया। इसमें पहली गलतफहमी है।
@alex के साथ चर्चा करते समय, मैंने सुझाव दिया कि वर्कफ़्लो और वर्कफ़्लो के माध्यम से एक इकाई बनाने के बीच सहसंबंध की कुछ दृढ़ता हो सकती है जो कि अंतिम रूप से उत्पन्न हो जाता है ... ठीक है। CorrelationId प्लगइन और वर्कफ़्लो और उस थ्रेड से स्पूल करने वाले किसी भी रिकॉर्ड में समान है। अब मैं इकाई और वर्कफ़्लो से CorrelationId (या शायद रिकॉर्ड का निर्माण) को कम करने के तरीकों को देख रहा हूं।
वर्कफ़्लो स्वयं को कॉल कर रहा है, यही कारण है कि आप एक अनंत लूप में समाप्त होते हैं। आपको पूरे दृष्टिकोण पर पुनर्विचार करना होगा, गहराई को बढ़ाने या टाइमआउट अवधि केवल अनंत लूपिंग के कारण प्रक्रिया की हत्या में देरी होगी। – Alex
आपके उत्तर के लिए धन्यवाद एलेक्स - आपने इसे सरल बना दिया है लेकिन मुझे नहीं लगता कि ऐसा है। यहां तक कि अगर हम स्वीकार करते हैं कि वर्कफ़्लो स्वयं को कॉल कर रहा है (एमएससीआरएम सोचता है कि ऐसा नहीं है, तो मुझे लगता है कि यह नहीं है - वर्कफ़्लो एक नया रिकॉर्ड बनाता है, बजाय एक बच्चे के वर्कफ़्लो के रूप में खुद को बुलावा देने के बजाय। मुझे उम्मीद है कि यह एक नया " धागा "- यद्यपि शायद प्लगइन का सहसंबंध आईडी माता-पिता से प्राप्त होता है और बाद के बाल वर्कफ़्लो तक जाता है), रिकर्सन की गहराई हर 10 या 60 मिनट में रीसेट की जानी चाहिए लेकिन यह नहीं है। –
मेरा मानना है कि एमएससीआरएम वास्तव में अप्रत्यक्ष रिकर्सन को वास्तव में सहसंबंध के कारण होने के कारण पहचानता है, यही कारण है कि लूप का पता लगाना। मैं चिंतित हूं, थोड़ा प्रयोग करेगा और आपको वापस ले जाऊंगा (यह वास्तव में मेरे लिए भी उपयोगी हो सकता है, कौन जानता है कि मुझे एक समान आवश्यकता कब मिलेगी? (:) – Alex