2010-01-14 7 views
8

में बदल गया है:लोड हो रहा है कार्यप्रवाह कायम बाद workflowdefinition कैसे (WF4 में) इस समस्या को हल करने के लिए WF4

मैं XAML में एक कार्यप्रवाह बना सकते हैं और यह के कई उदाहरण शुरू, मैं एक persistancestore है और सभी कार्य प्रवाह एक बुकमार्क पर जारी रहती है उनके वर्कफ़्लो का आधा रास्ता।

अब मैं आवेदन

मैं पुनः आरंभ तो ते आवेदन सब कुछ फिर से शुरू है, एन अच्छी तरह से पूरा करता है बंद करो।

लेकिन अगर चल रहे उदाहरणों के बाद मैं वर्कफ़्लो परिभाषा को बदलना चाहता हूं तो क्या होगा? चल वर्कफ़्लो लोड करने के लिए (है कि मैं खोजने के लिए सक्षम था) एक ही रास्ता निम्नलिखित तरीका है:

 WorkflowApplication wfapp = new WorkflowApplication(new WorkflowDefinition()); 
     wfapp.InstanceStore = new SqlWorkflowInstanceStore(connStr); 

     wfapp.Load(wfGuid); 

तो तुम, कार्यप्रवाह परिभाषा की जरूरत है अगर यह दृढ़ता के दौरान बदल गया है, बातें बहुत गलत हो जाते हैं।

इसे हल करने का सबसे अच्छा तरीका क्या है?

+1

बीटीडब्ल्यू, यह परिदृश्य कुछ डब्ल्यूएफ 4 वायदा का विषय है। इस प्रस्तुति को MIX 10 से देखें: http://channel9.msdn.com/Events/PDC/PDC10/FT08 – Will

उत्तर

3

यह परिदृश्य एक समस्या है। नए प्रारूप में पुरानी वर्कफ़्लो परिभाषा को माइग्रेट करने का कोई तरीका नहीं है। मैंने कुछ सीमित परीक्षण और कुछ परिदृश्यों को गतिविधियों को जोड़ने/हटाने के साथ किया है, जहां अभी तक निष्पादित नहीं किया गया है। लेकिन फिर भी परिदृश्य बुरी तरह गलत हो गए हैं, जिसमें पहले से ही समाप्त की गई गतिविधि को फिर से निष्पादित करना शामिल है।

जहां तक ​​मुझे पता है कि वर्कफ़्लो बनाने के लिए उपयोग किए गए XAML/असेंबली के संस्करण को ट्रैक करने के अलावा समस्या को हल करने का कोई अच्छा तरीका नहीं है और यह जांचना कि वर्कफ़्लो संस्करण को निर्धारित करने के लिए वर्कफ़्लो को पुनरारंभ करना चाहते हैं उपयोग।

1

विंडोज वर्कफ़्लो के साथ यह कोई समस्या नहीं है क्योंकि यह एसक्यूएल दृढ़ता सेवा है। आप अपनी खुद की दृढ़ता सेवा बना सकते हैं जो पुराने वर्कफ़्लो में नए वर्कफ़्लो या कुछ और अमूर्त रूप में रूपांतरण को समर्थन देकर, इस स्थिति को संभाल सकता है, जैसे एक्सएमएल/जेएसओएन के रूप में क्रमबद्ध एक दृढ़ता सेवा, जो कुछ आसानी से deserialization का समर्थन कर सकता है एक और संस्करण के रूप में संस्करण।

2

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

इसके अलावा, यदि आपके परिवर्तन में वर्कफ़्लो वेरिएबल्स में परिवर्तन शामिल नहीं हैं, अनुबंध सामने आए हैं, आदि ... पुराने और नए वर्कफ़्लो इंस्टेंस संस्करण समान वर्कफ़्लो संस्करण पर चल सकते हैं। आप इसे जान लेंगे, इसका परीक्षण करें।

1

WF4 में परिभाषा को बदलने के बाद लगातार wf उदाहरण लोड करना संभव है - आपको wf इंजन स्टोरों की XML फ़ाइलों को पार्स और बदलना होगा। आपको दो बराबर वर्कफ़्लो बनाना चाहिए: पुराने संस्करण और नए संस्करण के साथ और मतभेदों को दूर करने के लिए उनकी तुलना करने के लिए। यह परिभाषा xml और जटिल डेटा xml के लिए किया जाना चाहिए जिसका उपयोग वर्कफ़्लो स्थिति को संग्रहीत करने के लिए किया जाता है। LinqToXML के साथ इसे पार्स करने से आपको बहुत समय बचाया जाएगा और आपको यह सुनिश्चित करना होगा कि आपने सभी मतभेदों की जांच की है - यदि कोई अंतर बाकी है, तो wf लोड नहीं कर पाएगा। एक तत्व "रेज़्यूमेडाटा" है, जिसे आप wf state xml में पा सकते हैं, जो पार्स करने के लिए बहुत भारी है, लेकिन अच्छी खबर यह है कि आप इसे आसानी से हटा सकते हैं।

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