บทนำ
ด้วยการใช้ WWF คุณสามารถสร้างเวิร์กโฟลว์ที่อิงตาม Flow ของโปรเซสเซอร์และปรับใช้ในแอปพลิเคชัน .NET ประเภทใดก็ได้ นอกจากนี้ บทความนี้ยังกล่าวถึงปัญหาเฉพาะบางประการที่นักพัฒนา ASP.NET ต้องเผชิญ - ปัญหาที่อาจแก้ไขได้ผ่านการใช้เวิร์กโฟลว์ เช่น การรักษาสถานะและการนำทางเพจ
ในเดือนกันยายน พ.ศ. 2548 Microsoft ได้เปิดตัว Windows Workflow Foundation (WWF, Windows Workflow Foundation) ในการประชุมนักพัฒนามืออาชีพปีละสองครั้ง WWF เป็นหนึ่งในเสาหลักของ WinFX API โดยมอบกรอบการทำงานทั่วไปให้กับนักพัฒนาเพื่อพัฒนาแอปพลิเคชันที่ขับเคลื่อนด้วยกระบวนการและเน้นเวิร์กโฟลว์เป็นหลัก
ปัจจุบัน บางองค์กรกำลังพยายามทำให้กระบวนการทางธุรกิจทั้งหมดเป็นแบบอัตโนมัติ คำตอบมาตรฐานคือการรวบรวมทีมนักพัฒนาเพื่อพัฒนาโค้ดที่เกี่ยวข้อง แม้ว่าแนวทางนี้จะทำงานได้ดีสำหรับองค์กรเหล่านี้ แต่ก็ยังมีปัญหาอยู่บางประการ เพื่อทำความเข้าใจปัญหานี้ในเชิงลึก คุณจำเป็นต้องเข้าใจลักษณะพื้นฐานของเวิร์กโฟลว์
เวิร์กโฟลว์เป็นวิธีการหลักในการเก็บถาวรกิจกรรมที่เกี่ยวข้องกับการทำให้หน่วยของงานเสร็จสมบูรณ์ โดยทั่วไป ในระหว่างการประมวลผล งานจะ "ไหล" ผ่านกิจกรรมหนึ่งกิจกรรมขึ้นไป กิจกรรมเหล่านี้สามารถดำเนินการโดยเครื่องจักรหรือมนุษย์ และอาจง่ายพอ ๆ กับการกำหนดลำดับของเพจในแอปพลิเคชันอินเทอร์เน็ต หรือซับซ้อนเท่ากับการจัดการเอกสารหรือผลิตภัณฑ์ที่ต้องเห็น เปลี่ยนแปลง และอนุมัติโดยคนจำนวนเท่าใดก็ได้ ซับซ้อน.
เนื่องจากเวิร์กโฟลว์จำนวนมากต้องเปิดโอกาสให้มนุษย์มีส่วนร่วม จึงอาจใช้เวลานานในการดำเนินการให้เสร็จสิ้น ตั้งแต่ไม่กี่ชั่วโมงไปจนถึงหลายเดือนหรือนานกว่านั้น ตัวอย่างเช่น บุคคลที่เกี่ยวข้องในกระบวนการอาจไม่ว่าง ไม่ได้อยู่ในพื้นที่ หรือยุ่งอยู่กับงานอื่น ดังนั้น เวิร์กโฟลว์จะต้องสามารถคงอยู่ได้ตลอดช่วงเวลาที่ไม่มีกิจกรรม นอกจากนี้ กระบวนการที่นำไปใช้อย่างอิสระผ่านการเขียนโค้ดอาจเป็นเรื่องยากสำหรับผู้ที่ไม่มีความรู้ด้านเทคนิคในการเข้าใจ และยากสำหรับนักพัฒนาที่จะเปลี่ยนแปลง ปัจจัยนี้และปัจจัยอื่นๆ ล้วนเป็นเป้าหมายของเฟรมเวิร์กเวิร์กโฟลว์ทั่วไป เช่น Windows WF ซึ่งมีจุดมุ่งหมายเพื่อให้สร้าง เปลี่ยนแปลง และจัดการเวิร์กโฟลว์ได้ง่ายขึ้น ไม่ว่าจะโดยการจัดเตรียมอินเทอร์เฟซแบบภาพหรือโดยการกำหนดชุด API ทั่วไปที่รับรู้
คุณสามารถวางเวิร์กโฟลว์ WWF ในแอปพลิเคชัน .NET ประเภทใดก็ได้ รวมถึง Windows Forms, แอปพลิเคชันคอนโซล, บริการ Windows และแอปพลิเคชันบนเว็บ ASP.NET แต่ละประเภทต้องพิจารณาเป็นพิเศษ แม้ว่าตัวอย่างที่มีอยู่บางส่วนจะเพียงพอที่จะอธิบายวิธีการโฮสต์เวิร์กโฟลว์ลงใน Windows Forms และแอปพลิเคชันคอนโซล บทความนี้จะเน้นไปที่ปัญหาที่นักพัฒนา ASP.NET ที่ต้องการรวมเวิร์กโฟลว์เข้ากับแอปพลิเคชันของตนเอง
หมายเหตุผู้เขียน: รหัสที่ให้ไว้ในบทความนี้ถูกสร้างขึ้นโดยใช้ Windows WF Beta 1 และ Visual Studio 2005 Beta 2 คุณสามารถค้นหาข้อมูลเกี่ยวกับการติดตั้ง Windows WF ได้ที่ www.windowsworkflow.net แม้ว่าบทความนี้จะกล่าวถึงพื้นฐานบางประการของ Windows WF แต่ก็มีแหล่งข้อมูลอื่นๆ ในส่วนนี้ ฉันคิดว่าผู้อ่านรู้อย่างน้อยเกี่ยวกับ Windows WF วัตถุประสงค์ของบทความนี้คือเพื่อวิเคราะห์ Windows WF และ ASP.NET ในเชิงลึก แทนที่จะหารือเกี่ยวกับ Windows WF จากระดับสูง
1. รูปแบบ Windows WF และ MVC
เมื่อพัฒนาแอปพลิเคชัน ASP.NET วิธีทั่วไปที่คุณอาจใช้ WWF คือการใช้แนวทาง model-view-controller (MVC) โดยพื้นฐานแล้ว เป้าหมายของ MVC คือการแยกเลเยอร์การนำเสนอ ตรรกะของแอปพลิเคชัน และตรรกะการไหลของแอปพลิเคชัน
การทำความเข้าใจสิ่งนี้จะเป็นประโยชน์อย่างมากในการพัฒนาแอปพลิเคชัน ASP.NET โปรดพิจารณาสถานที่เวิร์กโฟลว์ตั๋วของฝ่ายช่วยเหลือ สมมติว่าผู้ใช้ทางธุรกิจเริ่มต้นเวิร์กโฟลว์นี้โดยการกรอกแบบฟอร์มเว็บ ASP.NET และคลิกปุ่มส่ง จากนั้น เซิร์ฟเวอร์จะแจ้งพนักงานโดยใช้แอปพลิเคชัน Windows Forms และ Help Desk ว่า "มีตั๋วใหม่แล้ว" จากนั้นพนักงานฝ่ายช่วยเหลือจะดำเนินการแก้ไขปัญหาและปิดตั๋วในที่สุด หากคุณใช้ Windows WF เพื่อพัฒนาสถานการณ์จำลองเวิร์กโฟลว์นี้ ตรรกะและโฟลว์การประมวลผลทั้งหมดสามารถมีอยู่ในเวิร์กโฟลว์นั้นเองได้ และแอปพลิเคชัน ASP.NET จะไม่จำเป็นต้องเข้าใจตรรกะนี้เลย
สถานที่ประเภทนี้ให้หลักฐานที่ชัดเจน การแยกคำอธิบายออกจากตรรกะเป็นสิ่งที่ดี เนื่องจากกระบวนการจัดการคำขอ Help Desk เป็นเรื่องธรรมดามาก หากคุณใช้โค้ด C# หรือ VB.NET เพื่อใช้ตรรกะนี้ในแอปพลิเคชัน .NET ต่างๆ คุณจะเสี่ยงต่อการเขียนโค้ดซ้ำหรือแย่กว่านั้น --การใช้โค้ดที่แตกต่างกันโดยสิ้นเชิง ไปสู่การใช้งานที่แตกต่างกันของกระบวนการทางธุรกิจเดียวกัน แต่ถ้าคุณใช้ WWF เพื่อใช้กระบวนการนี้ นักพัฒนาแอปพลิเคชันที่ต้องการกระบวนการนี้จะต้องแก้ไขขั้นตอนในที่เดียวเท่านั้น นั่นคือเวิร์กโฟลว์เอง โดยไม่ต้องกังวลกับการเปลี่ยนแปลงตรรกะของแอปพลิเคชัน การทำสำเนาโค้ดและตำแหน่งที่จะดำเนินการกระบวนการนี้สามารถบรรเทาลงได้โดยใช้ Windows WF
เมื่อใช้สถาปัตยกรรม MVC ใน ASP.NET โดยใช้ Windows WF นักพัฒนาควรพยายามสร้างเวิร์กโฟลว์ที่ไม่ขึ้นอยู่กับแอปพลิเคชัน - ในขณะที่เวิร์กโฟลว์ยังคงโฮสต์อยู่ภายในแอปพลิเคชัน สิ่งนี้จะช่วยรักษาตรรกะให้เป็นอิสระจากคำอธิบาย และรักษาความเป็นอิสระในระดับสูงระหว่างลำดับขั้นตอนการทำงานและโฟลว์เพจในแอปพลิเคชันเว็บ
นักพัฒนา WWF ใหม่อาจพยายามพัฒนาเวิร์กโฟลว์ที่มีจำนวนกิจกรรมคงที่ในลำดับที่แน่นอน และจากนั้นพัฒนาชุดของฟอร์มเว็บ ASP.NET ที่ไหลจากฟอร์มหนึ่งไปยังอีกฟอร์มหนึ่งในลำดับเดียวกัน น่าเสียดาย แม้ว่าสิ่งนี้จะดูสมเหตุสมผล แต่จริงๆ แล้วมันไม่มีประสิทธิภาพมากนัก เนื่องจากคุณจะต้องนำตรรกะของเวิร์กโฟลว์ไปใช้อีกครั้ง เว็บเพจ X ไม่จำเป็นต้องรู้ว่าจำเป็นต้องไปที่เพจ Y หรือเพจ Z เพื่อใช้ขั้นตอนเวิร์กโฟลว์นี้อย่างถูกต้อง แต่เวิร์กโฟลว์ (โมเดล) ควรบอก ASP.NET (คอนโทรลเลอร์) ว่าต้องทำอะไรต่อไป จากนั้น ASP.NET ควรตัดสินใจว่าจะแสดงเพจใด ด้วยวิธีนี้ แต่ละเพจแทบจะไม่ต้องเข้าใจกระบวนการทั้งหมด เพียงแต่ต้องรู้วิธีทำกิจกรรมที่แตกต่างกัน และปล่อยให้เวิร์กโฟลว์ดูแลว่าเพจไหลจากที่หนึ่งไปยังอีกที่หนึ่งอย่างไร การแยกนี้ทำให้นักพัฒนามีความยืดหยุ่นอย่างมากเมื่อต้องรับมือกับโฟลว์เพจ ตัวอย่างเช่น หากคุณตัดสินใจที่จะเปลี่ยนลำดับการแสดงเพจ คุณสามารถดำเนินการนี้ได้อย่างง่ายดายจากภายในเวิร์กโฟลว์โดยไม่ต้องเปลี่ยนโค้ดแม้แต่บรรทัดเดียวในแอปพลิเคชัน ASP.NET
2. ตัวอย่าง MVC เวิร์กโฟลว์อย่างง่าย
เพื่ออธิบายแนวคิดนี้ ฉันจะแสดงแอปพลิเคชันและเวิร์กโฟลว์ ASP.NET อย่างง่ายให้คุณดู เวิร์กโฟลว์ที่เรียบง่ายเกินไปนี้จะอธิบายกระบวนการที่รวบรวมข้อมูลส่วนตัวบางส่วนจากแอปพลิเคชันภายนอกแล้วแสดงข้อมูลดังกล่าว ขั้นตอนมีดังนี้:
1. เรียกใช้เมธอด - ซึ่งหมายถึงการขอชื่อบุคคล เวิร์กโฟลว์นี้ใช้กิจกรรม InvokeMethod (ดูรูปที่ 1)
2. รอจนกระทั่งเหตุการณ์เริ่มทำงาน - ซึ่งหมายถึงการรับชื่อ ในขั้นตอนนี้ เวิร์กโฟลว์จะใช้กิจกรรม EventSink
3. รับที่อยู่อีเมลจากโฮสต์โดยใช้การโทรที่คล้ายกัน
4. การรอกิจกรรมหมายถึงการรับที่อยู่
5. หลังจากได้รับชื่อและอีเมลแล้ว เวิร์กโฟลว์จะเริ่มกิจกรรม InvivMethod เพื่อส่งข้อมูลส่วนบุคคลไปยังแอปพลิเคชันการโทร ในสถานการณ์จริง ขั้นตอนสุดท้ายนี้ไม่สำคัญมากนัก มีแนวโน้มมากขึ้นที่คุณจะเรียกใช้บริการเว็บเพื่อส่งข้อมูลไปยังระบบอื่นหรือใส่ลงในฐานข้อมูล
รูปที่ 1. เวิร์กโฟลว์ตัวอย่าง: เวิร์กโฟลว์นี้อธิบายกระบวนการโดยนัยในแอปพลิเคชัน ASP.NET ตัวอย่าง
เมื่อต้องการใช้เวิร์กโฟลว์นี้ใน ASP.NET คุณต้องมีเพจสำหรับรวบรวมชื่อบุคคล เพจสำหรับรวบรวมที่อยู่อีเมล และเพจสำหรับแสดงข้อมูลส่วนบุคคล โปรดจำไว้ว่าแบบฟอร์มการเข้าสู่ระบบข้อมูลไม่ควรมีความรู้ว่าเกิดอะไรขึ้นก่อนหรือหลังจากนั้น เช่นเดียวกับหน้าที่แสดง อย่างไรก็ตาม แอปพลิเคชัน ASP.NET ต้องทราบว่าเพจใดที่จะแสดงต่อผู้ใช้ นี่คือจุดประสงค์ของการแนะนำคอนโทรลเลอร์ ตัวอย่างนี้ใช้ตัวจัดการ HTTP เพื่อนำโซลูชันไปใช้ ตัวจัดการแบบกำหนดเองนี้เรียกว่า WorkflowController รับผิดชอบงานต่อไปนี้:
· รับการอ้างอิงถึงเวลาที่เวิร์กโฟลว์กำลังทำงาน
· รับการอ้างอิงถึงอินสแตนซ์เวิร์กโฟลว์ที่มีอยู่หรือเริ่มต้นอินสแตนซ์เวิร์กโฟลว์ใหม่ (ขึ้นอยู่กับว่าอินสแตนซ์เวิร์กโฟลว์ได้เริ่มต้นแล้วหรือไม่)
·สร้างการสื่อสารระหว่างตัวควบคุมและเวิร์กโฟลว์
·จัดการเหตุการณ์จากเวิร์กโฟลว์นี้
·บอก ASP.NET ว่าเพจใดที่ต้องแสดง ขึ้นอยู่กับเลเยอร์ใดในเวิร์กโฟลว์ที่กำลังดำเนินการอยู่
อย่างที่คุณเห็น ตัวจัดการแบบกำหนดเองนี้จะจัดการงานทั้งหมดที่เกี่ยวข้องกับ WWF และการควบคุมเพจ โดยทำให้เพจ ASP.NET แต่ละเพจ "เงียบ" เกี่ยวกับการดำเนินการที่เกิดขึ้นในเบื้องหลัง สิ่งเดียวที่เว็บฟอร์มต้องกังวลคือการทำงานเฉพาะที่มีอยู่และส่งข้อมูลที่จำเป็นไปยังตัวควบคุม
ตามค่าเริ่มต้น WWF จะทำงานในรูปแบบอะซิงโครนัส ซึ่งหมายความว่าเมื่อโฮสต์แอปพลิเคชันเริ่มอินสแตนซ์เวิร์กโฟลว์ การควบคุมจะถูกส่งกลับไปยังโฮสต์ทันทีในขณะที่เวิร์กโฟลว์ยังคงดำเนินการบนเธรดอื่นต่อไป สิ่งนี้อาจมีประโยชน์ในแอปพลิเคชัน Windows Forms - โดยที่การตอบสนองอย่างต่อเนื่องของอินเทอร์เฟซผู้ใช้เป็นที่ต้องการอย่างมาก ด้วยการใช้โมเดลอะซิงโครนัสนี้ เวิร์กโฟลว์สามารถดำเนินการในเบื้องหลังได้ในขณะที่ผู้ใช้สามารถดำเนินการแอปพลิเคชันต่อไปได้ อย่างไรก็ตาม ในแอปพลิเคชันเว็บ อาจไม่คาดหวังลักษณะการทำงานประเภทนี้ เนื่องจากโดยทั่วไปแล้วการควบคุมจะถูกส่งกลับไปยังผู้ใช้หลังจากที่เซิร์ฟเวอร์เสร็จสิ้นหน่วยการทำงานแล้วเท่านั้น นี่คือศูนย์รวมของความสามารถในการปรับขนาดของ Windows WF อย่างแท้จริง ใน Windows WF นักพัฒนาสามารถใช้หรือสร้าง "บริการรันไทม์" เพื่อตรวจสอบและแก้ไขรันไทม์เวิร์กโฟลว์ได้ ตัวอย่างได้แก่:
· บริการคงอยู่ - เก็บสถานะเวิร์กโฟลว์ระหว่างการดำเนินการและเวลาไม่ได้ใช้งาน
· บริการติดตาม - ส่งออกข้อมูลเกี่ยวกับการดำเนินการเวิร์กโฟลว์ไปยังสื่อบางชนิด
· บริการธุรกรรม - ช่วยรักษาความสมบูรณ์ของข้อมูลระหว่างการดำเนินการเวิร์กโฟลว์
นอกจากนี้ บริการเธรดยังช่วยให้นักพัฒนาสามารถควบคุมวิธีอินสแตนซ์เวิร์กโฟลว์ได้ ถูกดำเนินการ ตามที่กล่าวไว้ก่อนหน้านี้ รันไทม์เวิร์กโฟลว์จะเรียกใช้อินสแตนซ์แบบอะซิงโครนัสบนเธรดที่ไม่ขึ้นกับโฮสต์ตามค่าเริ่มต้น แต่เนื่องจากนี่มักจะไม่ใช่สิ่งที่ ASP.NET คาดหวัง คุณจะต้องสลับบริการเธรดเวิร์กโฟลว์เริ่มต้น โชคดีที่ Microsoft ได้จัดเตรียมโซลูชันสำหรับ ASPNetThreadingService นี้ เมื่อต้องการใช้การเปลี่ยนแปลงนี้ คุณสามารถเพิ่ม ASPNetThreadingService ไปยังบริการรันไทม์เวิร์กโฟลว์ด้วยการเขียนโค้ดด้วยมือ หรือทำงานนี้ให้เสร็จสิ้นในไฟล์ web.config แอปพลิเคชันตัวอย่างในบทความนี้ใช้โหมดการกำหนดค่า ในส่วนรันไทม์/บริการเวิร์กโฟลว์ของ web.config (ดูรายการ 1) ให้เพิ่มบรรทัดที่คล้ายกับข้อความต่อไปนี้:
<add type=
"System.Workflow.Runtime.Hosting.ASPNetThreadingService,
System.Workflow.Runtime เวอร์ชัน = 3.0.00000.0,
วัฒนธรรม=เป็นกลาง PublicKeyToken=31bf3856ad364e35"/>
3. นำตรรกะของตัวควบคุมไปใช้
ถัดไป คุณต้องนำตรรกะของตัวควบคุมไปใช้กับโปรเซสเซอร์ HTTP ในการสร้างคอนโทรลเลอร์นี้ สิ่งที่คุณต้องทำคือสร้างคลาสที่เรียกว่า WorkflowController handler ซึ่งใช้อินเทอร์เฟซตัวจัดการ IHttp จนถึงตอนนี้ คุณยังไม่เห็นอะไรพิเศษเกี่ยวกับ Windows WF - นี่เป็นคุณสมบัติเฉพาะของ ASP.NET (อ่านต่อ)
ในคลาสตัวประมวลผล WorkflowController นี้ วิธีอินเทอร์เฟซตัวประมวลผล IHttp ชื่อ ProcessRequest จะจัดการคำขอเว็บจากแอปพลิเคชัน ASP.NET ที่นี่ คุณจะต้องได้รับการอ้างอิงถึงอินสแตนซ์รันไทม์เวิร์กโฟลว์แบบคงที่ สร้างตัวจัดการเหตุการณ์สำหรับเวิร์กโฟลว์ และเริ่มการดำเนินการเวิร์กโฟลว์ ก่อนที่จะเริ่มอินสแตนซ์เวิร์กโฟลว์ คุณต้องตรวจสอบว่าค่าสตริงการสืบค้นของคำขอมี GUID ที่แสดงถึง ID อินสแตนซ์เวิร์กโฟลว์หรือไม่ หากมี ID นี้ คุณจะรู้ว่ามีอินสแตนซ์ที่ทำงานอยู่ ดังนั้นคุณจึงสามารถรับการอ้างอิงไปยังอินสแตนซ์นั้นและดำเนินการต่อไปได้ หากไม่มี ID นี้ คุณจะต้องสร้างอินสแตนซ์ใหม่และเริ่มกระบวนการดำเนินการโดยการเรียกเมธอด Start Workflow ที่รันไทม์ของเวิร์กโฟลว์
หลังจากที่อินสแตนซ์เริ่มต้นแล้ว ตัวจัดการเหตุการณ์จะจัดการการสื่อสารเข้าและออกจากเวิร์กโฟลว์ เนื่องจากวัตถุประสงค์ของบทความนี้ไม่ใช่เพื่อหารือเกี่ยวกับบริการการสื่อสารในท้องถิ่น ฉันจะไม่หารือเกี่ยวกับหัวข้อนี้โดยละเอียดที่นี่ แต่จะวิเคราะห์เทคนิคการใช้งานระดับสูง และหารืออีกครั้งว่าสิ่งนี้ทำงานอย่างไรในแอปพลิเคชัน ASP.NET เพื่ออำนวยความสะดวกในการประมวลผลการสื่อสาร คุณจะต้องมีอินเทอร์เฟซ .NET หลายตัว ซึ่งใช้เพื่ออธิบายข้อมูลเข้าและออกจากเวิร์กโฟลว์และโฮสต์ คุณจะพบสิ่งเหล่านี้ในซอร์สโค้ดโปรเจ็กต์ WorkflowClassLibrary ที่แนบมากับบทความนี้ คุณยังจะพบคลาสที่ใช้อินเทอร์เฟซเหล่านี้และฟังก์ชันที่เกี่ยวข้องซึ่งจำเป็นต่อการนำกลไกเวิร์กโฟลว์ไปใช้
มาดูไฟล์ web.config กันสั้น ๆ อีกครั้ง โปรดทราบว่าใกล้กับองค์ประกอบ ASPNetThreadingService ที่กล่าวถึงก่อนหน้านี้ เราใช้สามองค์ประกอบเพื่ออธิบายคลาสบริการการสื่อสาร:
<add type="Workflow.RuntimeServices.GetNameService,
Workflow.Library, Version=1.0.0.0, วัฒนธรรม=เป็นกลาง,
PublicKeyToken=c4620ae819b5257e"/>
<เพิ่มประเภท = "Workflow.RuntimeServices.GetEmailService,
Workflow.Library, Version=1.0.0.0, วัฒนธรรม=เป็นกลาง,
PublicKeyToken=c4620ae819b5257e"/>
<เพิ่มประเภท = "Workflow.RuntimeServices.SendDataService,
Workflow.Library, Version=1.0.0.0, วัฒนธรรม=เป็นกลาง,
PublicKeyToken=c4620ae819b5257e"/>
นอกจากนี้ยังมีองค์ประกอบที่นี่ที่สั่งให้ไลบรารีรันไทม์เวิร์กโฟลว์ใช้ SqlStatePersistenceService บริการเพิ่มเติมนี้จัดเก็บการคงอยู่ของสถานะเวิร์กโฟลว์ในฐานข้อมูลเซิร์ฟเวอร์ SQL ระหว่างคำขอเพจ คุณต้องสร้างฐานข้อมูลนี้ด้วยตนเองใน ล่วงหน้า แต่ Microsoft ได้เตรียมสคริปต์ SQL ไว้แล้ว คุณจะพบสคริปต์ดังกล่าวในโฟลเดอร์ C:WINDOWSMicrosoft.NETFrameworkv2.0.50215Windows Workflow FoundationSQL แต่คุณยังสามารถนำไปใช้ในการกำหนดค่าได้ ซึ่งจะช่วยลดจำนวนโค้ดในการเขียนและให้ความยืดหยุ่นอย่างมาก - แม้ว่าจะสร้างโค้ดแล้วก็ตาม มีบรรทัดในการกำหนดค่าที่เพิ่ม HttpModule ซึ่งรองรับรันไทม์ Windows WF ไลบรารี่ใน ASP.NET ยังมีบรรทัดที่ตั้งค่าตัวควบคุม Http ที่กล่าวถึงก่อนหน้านี้ ดังที่คุณเห็นในการกำหนดค่านี้ มีหลายสิ่งหลายอย่างในนั้น
โดยสรุป Windows WF ให้ความสะดวกในการใช้งานอย่างยิ่ง กรอบการทำงานที่ขยายได้สำหรับนักพัฒนาเพื่อพัฒนาแอพพลิเคชั่นตามเวิร์กโฟลว์ มันได้กลายเป็นและจะยังคงเป็นแอพพลิเคชั่นที่สำคัญต่อไป เว้นแต่คุณจะเป็นบริษัทที่ให้บริการด้านเทคโนโลยีหรือ ISV ซอฟต์แวร์จะต้องจัดเตรียมกระบวนการทางธุรกิจและการดำเนินงาน นักพัฒนาสามารถทำให้กระบวนการพัฒนาง่ายและยืดหยุ่นได้