Workflow Services with Correlation
יש לי יחסי האהבה שינאה עם WF. אני מאוד אוהב את ה- Designer ,היכולות של Tracing ו- Persistence, תוסיפו לזה את העבודה עם Windows AppFabric , נראה שהולכים לכיוון הנכון. אז איפה הבעיה? אני רוצה WF Services שרץ על מספר שרתים ושיש לי כלי מוניטור שבו אני רואה את התהליכים בצורה הרבה יותר ברורה ממה שיש ב-AppFabric.
החלטתי לכתוב פוסט זה בעקבות השאלות הרבות שאני מקבל על הנושא. יש הרגשה שהנושא לא מספיק ברור בספרים ובפוסטים שיש, לכן החלטתי לתת את הדגשים שלי בנושא.
התפקיד של ה- Correlation ב-WF מתחלק לשניים:
א. לתאם בין מספר הודעות.
ב. לתאם הודעה ל-WF Instant .
אפשר לעשות את זה בכמה דרכים, אני הולך להסביר על Content-Based Correlation. אין כמו להתחיל עם דוגמא:

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

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

איך מסכרנים את ההזמנה לאישור הקרדיט של ההזמנה?
1. נשתמש בשדה מסוג CorrelationHandle וניתן לו את השם handle.
2. כאשר נקבל את ההזמנה ניצור WF Instance ונאתחל את ה- handle.

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

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

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