วันเสาร์ที่ 14 กรกฎาคม พ.ศ. 2561

ASP.NET WEB API 2 Pipeline

      สวัสดีครับวันจะมะแชร์ ทฤษฎีหลักการทำงานของ ASP.NET Web API กันครับ ซึ่งในโพสน์นี้จะไม่มีการเขียน Code แต่จะเน้นทฤษฎีเพื่อให้เข้าใจหลักการคร่าวๆ ก่อนไปเขียน Code ASP.NET Web API ได้อย่างถูกต้องครับ งั้นมาเริ่มกันเลยครับ

      แล้ว ASP.NET Web API คืออะไร?
      ASP.NET Web API คือ Framework ที่ช่วยให้เราสร้าง HTTP Service ง่ายขึ้น จนสามารถเข้าถึงผู้ใช้งานได้มากขึ้นโดยรองรับหลากหลาย Browser และ หลากหลาย Mobile ได้มากขึ้น เนื่องจากรองรับแบบ RESTful (RESTful คือ รูปแบบการเรียก HTTP Service อย่างหนึ่งที่สามารถใช้ได้กับหลากหลาย Platform) บน .NET Framework

      หลักการทำงานของ ASP.NET Web API
      ในการทำงาน ของ Web API 2 นั้นจะมีการทำงานตามหัวข้อใหญ่ๆดังนี้
      - Host                           คือ สถานที่เว็บ Service ของเราได้ทำการไว้เช่น IIS                           
      - Message Handlers     คือ เป็นตัวตรวจสอบข้อมูลชั้นแรกก่อนเข้าไปที่ Controller
      - Controller                  คือ ตัว Controller ที่สามารถตรวจสอบข้อมูลที่รับมาว่าถูก Format หรือไม่เช่น ค่า API Key ถูกต้องและเป็นตัวเก็บ Action Method
      - Model Biding            คือ การแปลงข้อมูลที่รับมาจากผู้ใช้ให้เป็นตัวแปร Object แล้วส่งให้ Action Filers
      - Action Filter             คือ  ส่วนทำการตรวจสอบข้อมูลที่รับเข้ามาอีกรอบหนึ่งว่าถูกหรือไม่ เช่น ข้อมูลต้องเป็นตัวเลข, ต้องมีค่าไม่เกิน 10 เป็นต้น ก่อนที่จะส่งข้อมูลให้ Action Method
      - Action Method          คือ ส่วนประมวลผลข้อมูล
      - Result Conversion     คือ การแปลงข้อมูลให้อยู่ในรูปแบบที่ตกลงกันไว้เช่น JSON, XML, BSON


รูปภาพแสดงหลักการทำงานของ ASP.NET Web API คร่าวๆ


      จากรูปจะเห็นการทำงานเป็นลำดับคือ 
- เมื่อ Host มีการ Request เข้ามา Message Handler จะทำการตรวจสอบเป็นครั้งแรกก่อนว่าข้อมูลที่เข้ามานั้นตรงตาม Format ที่กำหนดหรือไม่ เช่น Header มี Authentication หรือไม่, รูปแบบการ Authentication ถูกต้องหรือเปล่า เป็นต้น 
- ถ้าตรวจสอบถูกต้องจึงจะเข้าไปที่ Controller (ถ้าไม่ถูกให้ response Status Code Error กลับไปให้ผู้ใช้งาน) หลังจากนั้น Controller ก็จะส่งข้อมูลที่ได้ให้ Modelฺ Binding เพื่อทำการแปลงข้อมูลที่รับจากผู้ใช้งานให้เป็นตัวแปรที่สามารถใช้งานได้
-แล้วทำการให้ Action Filter เพื่อทำการตรวจสอบค่าของข้อมูลว่าเป็นไปตามที่กำหนดหรือไม่
-เมื่อตรวจสอบผ่านจึงส่งไปให้ Action Method ทำการประมวล
-แล้วส่งข้อมูลที่ประมวลผลเสร็จแล้วไปให้ Action Filter อีกที 
-แล้วค่อย Result Conversion เพื่อทำการแปลงข้อมูลที่คำนวณได้เป็นรูปแบบที่ผู้ใช้ต้องการเช่น JSON, XML, BSON 


จากหลักการทำงานตามลำดับดังกล่าวมา แต่ละส่วนก็จะมีการทำงานย่อยลงไปซึ่งผมจะแตกการทำงานย่อยแบ่งเป็น 2 ส่วนใหญ่คือ
1. ส่วน Message Handler (บางที่อาจจะเรียกว่า Delegating Handler)
2. ส่วน Controller ไปถึง Method Action

1. ส่วน Message Handler (บางที่อาจจะเรียกว่า Delegating Handler)
   เป็นส่วนของการตรวจสอบข้อมูลชั้นแรกก่อนส่งไปยัง Controller ซึ่งมีการทำงานย่อยลงไปดังรูป
ด้านล่าง
- HTTP Request Message คือ ข้อมูลรับจาก Host
- Message Handler คือ ตัวตรวจสอบข้อมูลที่ใช้ในการขอว่า รูปแบบข้อมูลถูกต้องหรือไม่
- Routing Dispatcher คือ ตัวจัดการรูปแบบของเส้นทางที่จะไปเรียก Web Service
- Controller Dispatcher คือ ตัวจัดการเส้นทางว่าควรใช้ Controller ตัวใหน
- HTTP Response Message คือ ข้อมูลที่จะส่งผ่าน HTTP ให้ Host



รูปภาพการทำงานภายในของ Message Handler


2. ส่วน Controller ไปถึง Method Action
    เป็นส่วนของการแปลงและตรวจสอบข้อมูลภายในเพื่อนำเอาข้อมูลที่ได้ไปประมวลผลดังรูปด้านล่าง
    - Controller คือ ตัวเก็บ Action Method
    - Authentication Filter คือ การตรวจสอบว่าใครเป็นคนขอข้อมูล
    - Authorization  Filter คือ การตรวจสอบสิทธิ์การการเรียกใช้งาน
    - Model Binding คือ การแปลงข้อมูลที่รับมาจากผู้ใช้ให้เป็นตัวแปร Object แล้วส่งให้ Action Filers
    - Action Filter และ Action Invoke คือ ส่วนทำการตรวจสอบข้อมูลที่รับเข้ามาอีกรอบหนึ่งว่าถูกหรือไม่ เช่น ข้อมูลต้องเป็นตัวเลข, ต้องมีค่าไม่เกิน 10 เป็นต้น 
    - Action Method คือ ส่วนประมวลผลข้อมูล
    - Exception Filter คือ ตัวตรวจสอบ Error ว่าถ้าเกิด Error ขึ้นเแล้วเป็น Error ประเภทใหน


รูปภาบการทำงานภายในส่วนช่วง Controller ถึง Action Method


 

ถ้าต้องการทราบการทำงานอย่างละเอียดสามารถเข้าไปดูได้ที่รูปด้านล่างหรือลิงค์ดังนี้ครับ https://channel9.msdn.com/Events/TechEd/Europe/2014/DEV-B410





Referrence
- https://www.slideshare.net/rjovic/aspnet-webapi-going-deep-into-the-pipeline
https://www.asp.net/media/4071077/aspnet-web-api-poster.pdf
https://channel9.msdn.com/Events/TechEd/Europe/2014/DEV-B410

วันศุกร์ที่ 13 กรกฎาคม พ.ศ. 2561

การสร้าง ASP.NET WEB API

     สวัสดีครับวันนี้จะมาแชร์เรื่องการสร้าง WEB API ผ่านทาง Visual Studio 2017 กันครับ ซึ่งจะเป็นการสร้าง WEB API แบบ MVC ซึ่งมีวิธีการสร้าง Project มีดังนี้ครับ

1.เปิดโปรแกรม Visual Studio 2017


2. คลิก File Menu -> New -> Project



3. Panel ด้านซ้ายให้กดเป็น Web -> Panel ด้านขวากด ASP .NET WEB APPLICATION แล้วตั้งชื่อ Project , Path ที่จะเก็บ, ชื่อ Solution ที่จะเก็บ แล้วกด OK
        a = เลือกว่าต้องการสร้างเป็น Web
        b = เลือก ASP .NET WEB APPLICATION
        c = ตั้งชื่อ Project Name
        d = ตั้ง Path ที่ต้องการเก็บโปรแกรม
        e = ตังชื่อ Solution ของ Project
        f = กำหนด Version ของ .NetFramWork



4. เลือก Web API , เลือก UnitTest (สำหรับการสร้าง Unitest ในการ test โปรแกรม) แล้วกดปุ่ม OK
                a. เลือกเป็นประเภท Web API
                b. เลือกเพื่อให้ทำการสร้างรูปแบบ MVC
                c. เลือกเพื่อให้รองรับการสร้าง Web API
                d. เลือกเพื่อให้สร้าง Unit Test สำหรับการสร้าง Project ไว้ Test โปรแกรม
                e. ตั้งชื่อโปรเจ็คสำหรับ Unit Test




5. เมื่อทำการสร้างเสร็จจะได้ Project ดังรูป



ทดสอบรัน โดยไปที่ Menu ชื่อว่า Debug -> Start Debugging หรือกดปุ่มตรงคีร์บอร์ด F5 จะได้ผลดังรูปครับ


วันอังคารที่ 10 กรกฎาคม พ.ศ. 2561

SQL Server Agent


      สวัสดีครับทุกท่าน
      เนื่องจากที่ผ่านมาผมได้ใช้ SQL Server Agent และเห็นว่ามีประโยชน์ วันนี้ผมเลยจะมาแชร์เรื่องการใช้ งาน SQL Server Agent ใน โปรแกรม SQL Server กันครับ

SQL Server Agent คืออะไร?

      SQL Server Agent เป็นการกำหนดงานอัตโนมัติให้กับ SQL Server เพื่อทำงานของระบบที่ทำงานเป็นประจำหรือตั้งไว้ล่วงหน้าครับ
      ผมขอยกตัวอย่างเพื่อให้เข้าใจยิ่งขึ้นเช่น
      ผมมี Database เยอะมากๆๆ และผมจำเป็นที่จะต้อง Back up Database ทุกเดือนซึ่งเมื่อก่อนเนี่ยเมื่อถึงต้นเดือนผมก็จะเข้าไป SQL Server เพื่อ Back Up Database หลายๆ Database จึงทำให้เสียเวลาครับ
     จะดีกว่าใหมที่มีเครื่องมือที่่สามารถ Back up Database แทนเราอัตโนมัติทุกเดือน ซึ่ง SQL Server Agent สามารถช่วยได้ครับ      

รูปภาพแสดง SQL Server Agent

การเปิดใช้งาน

    โดย Default SQL Server Agent จะ Stop การทำงานของ SQL Server Agent เราจำเป็นที่จะต้อง Start ตัว SQL Server Agent ก่อนจะใช้งาน โดยคลิกขวาไปที่ SQL Server Agent -> Start ดังรูปครับ

รูปภาพแสดงวิธีการ Start SQL Server Agent

การใช้งาน SQL Server Agent

     ใน SQL Server Agent จะแบ่งหัวข้อออกออกเป็นดังนี้
  • Jobs                  คือ เป็นตัวกำหนดช่วงเวลาที่ต้องการให้ทำงาน
  • Alerts               คือ จะแจ้งเหตุการณ์เมื่อมี เหตุการณ์ หรือ Error ตรงตามที่กำหนดไว้
  • Proxies             คือ การสั่งงานผ่าน Proxy
  • Error  Logs       คือ ประวัติการทำงานของ Jobs ว่าทำงานได้ปกติหรือไม่

รูปภาพแสดง SQL Server Agent เมื่อทำการ Start เรียบร้อยแล้ว




สมมุติตัวอย่างผมต้องการให้ SQL Server Agent ทำการ BackUp ข้อมูลทุกวันที่ 1 เวลาเที่ยงคืนของทุกเดือน (ที่ผมเลือกเที่ยงคืนเพราะว่าเที่ยงคืนไม่ค่อยมีคนใช้งานจึงไม่ส่งกระทบกับระบบมากนัก) ผมก็จำเป็นที่จะต้องตั้งค่า SQL Server Agent ดังนั้ครับ


      1.คลิกขวาที่ Jobs->New Jobs ดังรูปด้านล่าง

รูปภาพแสดงการ New Job
      
      2. ทำการตั้งชื่ออะไรก็ได้ของงาน และ ใส่คำอธิบายลงไป ตามรูปด้านล่าง
                  a. คือ ให้ใส่ชื่อของงาน
                  b. คือ ให้ใส่คำอธิบายของงาน
รูปภาพแสดงการตั้งชื่อและคำอธิบายของ Job



      3. กด Step ตรง Panel Select a page และ ทำการกดปุ่ม New เพื่อสร้าง Step ขึ้นมา (Step คือคำสั่งที่ต้องการกระทำเมื่องานถึงเวลาที่กำหนด) ตามรูปด้านล่าง
            a. คือ การคลิกปุ่ม Step
            b. คือ การคลิกปุ่ม New
รูปภาพเข้าหน้า Step

      4. หน้าต่าง New Job Step จะแสดงขึ้นมา หลังจากนั้น ให้ใส่ชื่อ Step -> เลือก Type เป็น T-SQL -> เลือก Database ที่จะรันร่วมกับ T-SQL -> ใส่คำส่อง T-SQL -> กดปุ่ม OK
            a. คือ สำหรับใส่ชื่อ Step ซึ่งเป็นชื่ออะไรก็ได้ (ในตัวอย่างนี้ผมใส่ว่า "BackUp Database Test")
            b. คือ เลือกว่าเราต้องการใช้คำสั้งแบบใหนในการสั่งงาน (ในตัวอย่างนี้ผมเลือกเป็น "Transact-SQL script (T-SQL)")
            c. คือการเลือกว่าจะให้ คำสั่ง T-SQL มีผลต่อถังDatabase ถังใหน (ในตัวอย่างผมเลือกถังชื่อว่า "Test" เพราะผมต้องการ Back Up Database ถังที่ชื่อว่า "Test" ครับ)
            d. คือช่องใส่คำสั่ง T-SQL (ในตัวอย่างนี้ผมใส่คำสั่ง Back Up Database ถังที่ชื่อว่า Test ไปไว้ที่ Drive: C:\TEST\SQL\ แล้วตั้งชื่อไฟล์ที่ Back Up ว่า test2_backup_[year]-[Month]-[day].bak ดังนี้ครับ

Declare @DatabaseName varchar(50)
Declare @PathTo varchar(300)
Declare @Fullpath varchar(300)
set @DatabaseName = 'Test'
set @PathTo = 'C:\Test\SQL\'
set @Fullpath = @PathTo + @DatabaseName + '_backup_'
+ convert(varchar,year(getDate())) + '-'
+ convert(varchar,month(getDate())) + '-'
+ convert(varchar,day(getDate())) + '.bak'

BACKUP DATABASE @DatabaseName TO
DISK=@Fullpath with NOFORMAT, INIT

)

รูปภาพแสดงการตั้งค่า Step




      5. กด Schedules ตรง Panel Select a page และ ทำการกดปุ่ม New เพื่อสร้าง Schedules ขึ้นมา (Schedules คือหน้าไว้กำหนดช่วงเวลาที่ต้องทำงาน) ตามรูปด้านล่าง
            a. คือ การคลิกปุ่ม Schedules
            b. คือ การคลิกปุ่ม New

รูปภาพเข้าหน้า Schedule

      6. หน้าต่าง New Job Schedule จะแสดงขึ้นมา หลังจากนั้น ให้ตั้งชื่อ Schedule ตั้งเวลาที่ต้องการทำงาน เสร็จแล้วกด ปุ่ม OK ดังรูปด้านล่าง
             a. คือการตั้งชื่อ Schedule เป็นอะไรก็ได้ (ในตัวอย่างนี้ผมตั้งชื่อว่า NightTime)
             b. คือตั้งช่วงเวลาที่ต้องให้ทำงาน (ในตัวอย่างนี้ผมตั้งเป็น Month)
             c. คือการตั้งเวลาว่าให้ทำงานเวลากี่โมง (ในตัวอย่างนี้ผมตั้งเป็นเที่ยงคืนคือ 00:00:00)
             d. คือการตั้งให้ทำงานตลอดไปโดยไม่มีที่สิ่นสุด

รูปภาพการตั้งค่า Schedule


      7. ให้กดปุ่ม OK อีกครั้ง เป็นการเสร็จสิ้นการตั้งค่า่ครับตามรูปด้านล่างครับ



8. ทดสอบการทำงานโดยการ คลิกขวาที่ตามชื่อ JOB ที่เราสร้าง -> Start Job As Step...

รูปภาพแสดงการทดสอบรัน Job ที่เราสร้าง



จะขึ้นหน้าต่างแสดงสถานะการทำงานครับ หากไม่มี ERROR แสดงว่า Job ที่เราสร้างสามารถทำงานได้สมบูรณ์

รูปภาพแสดงผลของการทดสอบรัน Job



หลังจากนี้ SQL Server Agent ก็จะทำงาน Back Up Database ของเรา Auto แล้วครับโดยที่เราไม่ต้องเข้าไป Back Up เองอีกแล้วครับ 



ผมหวังว่าโพสน์นี้จะมีประโยชน์กับผู้อ่านครับขอบคุณครับ



วันเสาร์ที่ 7 กรกฎาคม พ.ศ. 2561

Task Scheduler on Windows


สวัสดีครับ วันจะมาแขร์เรื่อง Task Scheduler บน Windows กันครับ

แล้ว Task Scheduler คืออะไร

Task Scheduler คือ Tool ที่อยู่บน OS Windows ที่จะคอยเป็นตัวกระทำต่างๆ เมื่อถึงช่วงเวลาที่กำหนด เช่น ส่งเมล์ เปิดโปรแกรม หรือให้แจ้งเตือนบางอย่าง

ยกตัวอย่างการนำไปใช้เช่น


          สมมุติเรามีโปรแกรมในการตรวจสอบ OS Window ทุกเช้าเวลา 8:00 AM ว่าระบบทำงานปกติหรือไม่ แต่โปรแกรมที่เรามีเนี่ยเวลาโปรแกรมทำงานมันจะทำงานครั้งเดียวแล้วปิดตัวเองอัตโนมัติ ดังนั้นเราจำเป็นที่จะต้องกดเปิดตัวโปรแกรมนี้ทุกเช้าเวลา 8:00 AM ตลอดเวลา

รูปภาพตัวอย่าง โปรแกรมที่ต้องการให้ Task Scheduler เปิดใช้งาน

       แต่จะดีกว่าใหมที่เราไม่ต้องเปิดโปรแกรมนี้เอง เราเลยใช้ Tool ที่ชื่อว่า Task Scheduler มาช่วยในการ Auto เปิดโปรแกรมทุกเช้าแทน

แล้วเราสามารเข้าไปเปิดได้ที่ใหน

        วิธีการเข้าไปใช้งาน Task Scheduler สามารถเข้าไปได้ที่ Control Panel ->Administrative Tools -> Task Scheduler
รูปภาพ แสดงวิธีการเปิด Task Scheduler

วิธีการใช้งาน Task Scheduler

ตัวอย่างการใช้ Task Scheduler ผมจะอธิบายไว้ใน Video ครับเพื่อให้เห็นภาพและเข้าใจได้ง่ายครับ โดยตัวอย่างนี้จะเป็นการตั้งค่า Task Scheduler ให้เปิดโปรแกรมที่ชื่อว่า Check Windows ทุก 8:00 AM ครับ