سؤال

حسنًا ، لذلك قد أقترب من هذا بشكل غير صحيح ، لكنني أحاول اللعب مع خدمات WF الجديدة في 4.0 لتربية خدمة Windows التي تستضيف خدمة WF. في الوقت الحالي ، قمت ببناء عميل (يحتوي على نشاط بسيط XAML) والخدمة (خدمة WF التي تم تنفيذها في ملف XAMLX).

لقد جربت بسيطة "Hello Worlds" لكل واحد. تم استضافة العميل في أ WorkflowApplication وأنا في البداية قم بإعداد الخدمة كقالب مشروع خدمة WF الافتراضي. كلاهما يبدو أنه بخير هناك.

بما أنني أرغب في استضافة خدمة بدون IIS ، فمن الطبيعي أن محاولتي التالية هي استضافة خدمتي في أ WorkflowServiceHost. القيام بذلك يمكنني استخدامه XamlServices.Load() وتمرير الكائن الذي يعود إلى WorkflowServiceHost مُنشئ مع URI لنقطة النهاية. كنت قلقًا لأنه لا يوجد Run() طريقة الأعضاء كما هو الحال في WorkflowApplication صف دراسي. افترضت أن Open() ستقوم الطريقة بفتح كائن مضيف الخدمة كخدمة وأنه سيبدأ مثيلًا لسير العمل ولكن لا يوجد أي مؤشر على ذلك.

في البداية أقوم بإعداد سير عمل الخدمة للكتابة ببساطة إلى ملف نصي عندما بدأ ولكن لم يحدث شيء. حاولت تصحيح نقاط التوقف ، لكن نظرًا لأنه يقوم بتحميل ملف XAMLX في وقت التشغيل ، فإن VS لا يسمح لي بتصحيح WF. لذلك حاولت تغيير مشروع العميل قليلاً لاستخدام أ WorkflowServiceHost بدل من WorkflowApplication. لقد استخدمت نفس سير العمل المستخدم لاختبار سير العمل Hello World Style وهذه المرة لم يكن هناك إخراج إلى وحدة التحكم و WorkflowApplication كان ناجحا مع ذلك سابقا.

إليك أساسيات ما فعلته مع العميل لاستضافة خدمة سير العمل في مشروع وحدة التحكم. إذا كان أي شخص يريد رؤية XAML لسير العمل ، فأخبرني وسأقوم بتحديث هذا السؤال. إليك رمز الاستضافة في Main().

const String clientAddress = "http://localhost:9998/Client";    
WorkflowServiceHost wfHost = new WorkflowServiceHost( new ClientWf(), new Uri(clientAddress) );
wfHost.Open();

while( Console.ReadKey().KeyChar.ToString().ToUpper() != "X" ) {    }

wfHost.Close();
هل كانت مفيدة؟

المحلول

ما اكتشفته هو أنه نظرًا لأنه لا يمكنك بدء تشغيل مثيل WF مباشرةً الذي يتم لفه WorkflowServiceHost الكائن ، إنه أمر من الألم قليلاً لتشغيله ومن المستحيل إلى حد كبير من خلال استدعاء طريقة بسيطة كما يمكنك تحقيقه مع أ WorkflowApplication. هناك "خدعة" لإشعال النار في WF ولكنها تأخذ بعض الشيء من القرصنة التي لم أقم بها وقتًا في هذا المنعطف. MSDN لديه مرجع غامض لما يمكنك القيام به في هذا السيناريو هنا, ، تحت استضافة سير العمل غير الخدمة.

هذا هو الحل الذي ذهبت إليه: باستخدام كل من WorkFlowServicehost و WorkflowApplication. لماذا تسأل؟ حسنًا ، لأنني كنت أحاول القيام بالكثير من كل شيء في حزمة صغيرة صغيرة. أنا أيضًا أقوم ببناء هذا كنموذج خدمة مخصص لعملي ومن الأفضل أن أفصل منطق العمل (سير العمل) من جميع تنفيذ الاتصالات (WorkFlowServicehost). تطلق الخدمة على ما يرام بهذه الطريقة بالطبع الآن بلدي comm. يبدأ سير العمل بنشاط الاستقبال وبحث عن عمل سير العمل عن نوع من نشاط المراسلة في جذر سير العمل المرتبط به من أجل بدء مثيل.

الآن أنا عربة سعيدة. يقوم منطق عملي بما يفترض أن يفعله كما هو متوقع ، وخدمة سير العمل تتخلى بشكل جيد. والأفضل من ذلك هو أن لدي نموذجًا حيث يمكنني التراجع ديناميكيًا في منطق العمل لإعداد ونشر خدمات معالجة/معالجة البيانات المخصصة بشكل ديناميكي. الآن فقط لإتقان دعم المكالمات لتاريخ "لوحة القيادة" عن بُعد ، هذا ما أنتقل إليه بعد ذلك.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top