Workflow Services with Correlation

24 בפברואר 2011

תגיות: ,
אין תגובות

Workflow Services with Correlation

יש לי יחסי האהבה שינאה עם WF. אני מאוד אוהב את ה- Designer ,היכולות של Tracing ו- Persistence, תוסיפו לזה את העבודה עם Windows AppFabric , נראה שהולכים לכיוון הנכון. אז איפה הבעיה? אני רוצה WF Services שרץ על מספר שרתים ושיש לי כלי מוניטור שבו אני רואה את התהליכים בצורה הרבה יותר ברורה ממה שיש ב-AppFabric.

החלטתי לכתוב פוסט זה בעקבות השאלות הרבות שאני מקבל על הנושא. יש הרגשה שהנושא לא מספיק ברור בספרים ובפוסטים שיש, לכן החלטתי לתת את הדגשים שלי בנושא.

התפקיד של ה- Correlation ב-WF מתחלק לשניים:

א. לתאם בין מספר הודעות.

ב. לתאם הודעה ל-WF Instant .

אפשר לעשות את זה בכמה דרכים, אני הולך להסביר על Content-Based Correlation. אין כמו להתחיל עם דוגמא:

clip_image001

ה-WF מתנהג כמו WS רגיל לחלוטין ואין שום דבר מיוחד, חוץ מזה שיצרתי אותו ע"י Drag & Drop.

ה- ReceiveOrder מגדיר את ה- Operation וארגומנטים של השרות, באמצע עושים איזו עבודה ומחזירים תשובה, ה- SendReplyToReceive מגדיר את הערך המוחזר. בקיצור Receive & Reply רגיל. אבל עכשיו אני רוצה לסבך את הסיפור ולהוסיף לסוף ה-WF את החלק הבא:

clip_image002

מה שקורה כאן, הוא שאחרי ששלחנו תשובה לבקשה הראשונה התהליך ממשיך ( נסו לעשות את זה ב- WCF ) ומגיע לנקודה שהוא מחכה לבקשה של אישור ההזמנה. צריך לזכור שכל תהליך יש לו מספר יחודי וכאשר יתקבל אישור הקרדיט על הזמנה צריך לשייך את האישור להזמנה המתאימה. בנוסף לכל זה, אנחנו רוצים שה-WF יוכל לרוץ על מספר שרתים ,כך שתחילת התהליך של ההזמנה יכול להגיע לשרת אחד והאישור הקרדיט יכול להגיע לשרת שני.

clip_image003

איך מסכרנים את ההזמנה לאישור הקרדיט של ההזמנה?

1. נשתמש בשדה מסוג CorrelationHandle וניתן לו את השם handle.

2. כאשר נקבל את ההזמנה ניצור WF Instance ונאתחל את ה- handle.

clip_image004

כאשר לוחצים על 3 הנקודות מקבלים את החלון הבא:

clip_image005

בחלון זה אנחנו בוחרים ליצור את ה-handle מסוג Query ובוחרים מתוך הארגומטים הנכנסים את הארגומנט שעל פיו נסכרן את ההזמנה לאישור הקרדיט.

3. באקטיביטי של ה-Receive השני, אישור הקרדיט להזמנה אנחנו מאתחלים את ה- CorrelatesWith עם ה-handle שאתחלנו בסעיף הקודם, ובנוסף אנחנו מאתחלים את ה- CorrelatesOn במספר ההזמנה.
clip_image006

שימו לב, שם ה-Key צריך להיות אותו דבר כמו שהגדרתם באתחול ה-handle ראו סעיף 2. ה-WF יעשה התאמת מפתחות ואז הוא יחפש לאיזה WF יש את אותו מספר הזמנה כדי לדעת לשייך את אישור הקרדיט להזמנה הרלוונטית.

זה נקרא באנגלית פשוטה : Content-Based Correlation, כי אנחנו עושים סכרון ע"פ תוכן ההודעה.

בפוסט הבא אני אתאר איך להריץ את השרות על מספר שרתים? והאם אפשר להריץ את זה בענן?

הוסף תגובה
facebook linkedin twitter email

כתיבת תגובה

האימייל לא יוצג באתר. שדות החובה מסומנים *