2011-03-11 18 views
6

एक क्लाइंट सिस्टम हम निम्नलिखित का समर्थन करना चाहिए बना रहे हैं के लिए:
- यह कई कार्य प्रवाह है, और एक अलग संदर्भ के साथ एक ही वर्कफ़्लो के कई उदाहरण चलाने के लिए संभव होना चाहिए (अलग डेटा /बिज़नेस ऑब्जेक्ट्स)।
- कुछ वर्कफ़्लो लंबे समय तक चलने वाले होंगे, इसमें एकाधिक उपयोगकर्ता/क्लाइंट सत्र शामिल होंगे और बाहरी उपयोगकर्ता इनपुट की प्रतीक्षा होगी। तो वर्कफ़्लो को जारी रखने में सक्षम होना चाहिए और क्लाइंट ऐप से कुछ सिग्नल का जवाब देना चाहिए। और इसका यह भी अर्थ है कि वर्कफ़्लो का निष्पादन सर्वर ऐप (दाएं?) पर किया जाना चाहिए।
- मैं सर्वर ऐप पर सभी प्रकार के वर्कफ़्लो चलाने में सक्षम होना चाहता हूं, और जब वर्कफ़्लो बदलता है तो मैं सर्वर ऐप को फिर से तैनात नहीं करना चाहता हूं।विंडोज कार्यप्रवाह फाउंडेशन WF4 - वर्कफ़्लो होस्टिंग

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

मूल रूप से मैं एक विशिष्ट संदर्भ (वर्कफ़्लो सर्वर ऐप में) के साथ वर्कफ़्लो की शुरुआत (क्लाइंट ऐप से) शुरू करना चाहता हूं।

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

किसी भी मदद की बहुत सराहना की है!

उत्तर

15

अपनी आवश्यकताओं के लिए के रूप में:

यह कई वर्कफ़्लो चलाना संभव होना चाहिए, और एक अलग संदर्भ (अलग डेटा/व्यापार वस्तुओं) के साथ एक ही वर्कफ़्लो के कई उदाहरण।

यह डब्ल्यूएफ के साथ कोई समस्या नहीं है।

कुछ workflows लंबे समय से चल रहा है हो जाएगा, एकाधिक उपयोगकर्ताओं/ग्राहक सत्र और बाह्य उपयोगकर्ता इनपुट के लिए इंतज़ार कर शामिल है। तो वर्कफ़्लो होने में सक्षम होना चाहिए और क्लाइंट ऐप से कुछ सिग्नल का जवाब देना चाहिए। और इसका अर्थ है कि वर्कफ़्लो का निष्पादन सर्वर ऐप (दाएं?) पर किया जाना चाहिए।

डब्ल्यूएफ लंबे समय तक चलने वाले कार्यों के लिए डिज़ाइन किया गया है जो बाहरी प्रभावों से बातचीत कर सकते हैं। हालांकि, यह पूरा करने में आसान नहीं कहता है; कोई सार्वभौमिक समाधान नहीं है जिसे आप हुक कर सकते हैं। आपको शायद Workflow Extensions से बातचीत करने वाली कस्टम क्रियाकलापों को डिज़ाइन करना होगा जो वर्कफ़्लो में उपयोगकर्ता इनपुट को स्थानांतरित करते हैं। वर्कफ़्लो को बाहरी रूप से उजागर करने के साथ ही, हालांकि डब्ल्यूएफ 4 डब्ल्यूसीएफ गतिविधियों की मेजबानी के साथ आता है जिसका उपयोग इसे पूरा करने के लिए किया जा सकता है।

मैं सर्वर अनुप्रयोग पर workflows के सभी प्रकार चलाने के लिए सक्षम होना चाहता हूँ, और मैं सर्वर ऐप्लिकेशन को फिर से तैनात जब एक कार्यप्रवाह परिवर्तन करने के लिए नहीं करना चाहती।

यह पूरा करना मुश्किल है। आपको कम से कम, वर्कफ़्लो को सर्वर कोड से अलग करना होगा। सबसे आसान तरीका है कि वर्कफ़्लो को xaml और load it at runtime के रूप में डेटाबेस से स्टोर करना है।

अन्य विकल्प किसी प्रकार की निर्भरता इंजेक्शन ढांचे (जैसे संरचना मानचित्र या एकता) का उपयोग करना है जो रनटाइम पर वर्कफ़्लो असेंबली लोड करता है। यदि वर्कफ़्लो बदलते हैं, तो आप सर्वर पर नई असेंबली छोड़ सकते हैं, अपनी कॉन्फ़िगरेशन बदल सकते हैं और पुनरारंभ कर सकते हैं। वैकल्पिक रूप से, आप अपने वर्कफ़्लो असेंबली को अपने स्वयं के ऐपडोमेन के भीतर अलग कर सकते हैं, उन्हें रनटाइम पर लोड कर सकते हैं और डोमेन को फेंक सकते हैं जब आपको एक नया संस्करण पुनः लोड करना होगा। आप जो भी करते हैं वह आपकी आवश्यकताओं पर निर्भर करता है; मैं वास्तव में तीसरा विकल्प कर रहा हूं क्योंकि मुझे रनटाइम पर वर्कफ़्लो असेंबली के कई अलग-अलग संस्करणों को लोड करना है, उन्हें एक साथ चलाना है, और वे अक्सर संसाधनों को एम्बेड करते हैं जिससे मुझे एक्सएएमएल रूट जाने से रोकते हैं।

मेरा पहला विचार वर्कफ़्लो सेवाएं थी। बहुत सारे शोध I के बाद निष्कर्ष निकाला गया कि यह सही नहीं है पथ वर्कफ़्लो सेवा मूल रूप से गतिविधियों को क्लाइंट ऐप में वर्कफ़्लो से शुरू होने से दूरस्थ स्थान पर निष्पादित करने की संभावना देता है। यह सही है?

मैं एक मानक विंडोज सेवा अनुप्रयोग के भीतर अपने वर्कफ़्लो होस्ट कर रहा हूं। मुझे डब्ल्यूसीएफ फ्रंटएंड को प्रबंधित और बनाए रखना है जो क्लाइंट मेरे वर्कफ़्लो के साथ बातचीत करने के लिए उपयोग करता है। जहां तक ​​मैं कह सकता हूं, वर्कफ़्लो सेवाएं स्थिर वर्कफ़्लोज़ के लिए व्यवहार्य विकल्प की तरह लगती हैं, अगर मैं इसे सही ढंग से समझता हूं। ऐपफैब्रिक में एक एप्लिकेशन को होस्ट करना भी एक अच्छा विकल्प है, और मुझे विंडोज सेवा का उपयोग करने से सरल लगता है। लेकिन मेजबान क्या कोई फर्क नहीं पड़ता, आपके पास दो विकल्प हैं - आपके वर्कफ़्लो आपके सेवा अनुबंध को परिभाषित करते हैं, या आपको सेवा अनुबंध को परिभाषित करना होगा और आपके द्वारा प्रबंधित किए जा रहे वर्कफ़्लो के साथ सभी निष्पादन और संचार को संभालना होगा।

पहला सरल मुखौटा के साथ स्थिर वर्कफ़्लो के लिए पहला विकल्प है। यह आपके लिए एक अच्छा विकल्प नहीं प्रतीत होता है, क्योंकि आपको बदलते समय वर्कफ़्लो को गतिशील रूप से लोड करना होगा; जिसके लिए क्लाइंट से संचार न केवल "वर्कफ़्लो एक्स का नया संस्करण है" को संभालने के लिए वर्कफ़्लो के बाहर तर्क की आवश्यकता होती है) लेकिन वर्कफ़्लो जीवनकाल का प्रबंधन भी करता है।

ऐसा लगता है जैसे आप, ग्राहकों से कॉल संभाल मेजबान आवेदन (आईआईएस WebService आवेदन, Windows सेवा, AppFabric, Azure) किसी तरह का पता लगाने के लिए है, तो अपने WCF सेवा को परिभाषित करने और इसे ऑनलाइन लाने के लिए, अपने कार्यप्रवाह करने के लिए इन कॉल संचार होगा कोड चला रहा है, जो तब इन कॉलों को लोड और निष्पादित करना होगा और परिणाम को श्रृंखला को वापस कर देना होगा।

मैं मदद नहीं कर सकता लेकिन ध्यान देता हूं कि आप यात्रा के लिए थोड़ा बीमार तैयार हैं। मैं दृढ़ता से एक प्रोटोटाइप बनाने का सुझाव दूंगा जो आपकी आवश्यकताओं के केंद्र के मांस के माध्यम से अच्छी तरह से स्लाइस करता है। एक होस्टेड एप्लिकेशन (मैं ऐपफैब्रिक का सुझाव दूंगा) एक डब्ल्यूसीएफ फ्रंटएंड के साथ जो एक्सएएमएल-आधारित वर्कफ़्लो लोड करता है जो क्लाइंट कॉल को संसाधित करता है। एक बार जब आपके पास सरल संस्करण कम हो जाए, तो आप अपनी सभी आवश्यकताओं को शामिल करने के लिए दायरे को बढ़ा सकते हैं।

+0

इस उत्तर के लिए आपको बहुत बहुत धन्यवाद। यह मेरे संदेह की पुष्टि करता है :-) – Maarten

+0

मेरी माफी, मुझे आपके उत्तर को लंबे समय से स्वीकृत के रूप में टैग करना चाहिए था। – Maarten

+0

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

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