วันพุธ, กรกฎาคม 14, 2553

ทิป เว็บเซอร์วิส : ลดปริมาณการรับ-ส่งข้อมูลบนเครือข่าย (Minimize traffic)

การเรียกเซอร์วิสข้ามระหว่างโพรเซส จะเป็นการสิ้นเปลืองทรัพยากรระบบมาก ดังนั้นเราควรลดจำนวนของ การสัญจร ข้อมูล
ที่วิ่งผ่าน ระหว่าง ตัวเว็บเซิอร์วิส และ ตัวที่ขอใช้บริการของมัน
แนะนำให้เลือกใช้เพียง ไม่กี่เว็บเมทธอด (จำนวนน้อย) สำหรับการส่งคืนค่าข้อมูลจำนวนมาก แทนเว็บเมทธอดหลายๆ ตัว ในการส่งคืนค่าข้อมูลอันจำกัด หรือข้อมูลที่ยังไม่สามารถนำมาใช้ได้
ดังนั้น ควรหลีกเลี่ยง การเรียกเว็บเมทธอดบ่อยครั้ง ในกรณีที่เราสามารถ นำผลลัพธ์อย่างเดียวกันออกมาได้โดยใช้เพียง เว็บเมทธอดเดียว สำหรับส่งคืนข้อมูลจำนวนมากได้

วันอังคาร, กรกฎาคม 13, 2553

ทิป เว็บเซอร์วิส : เรียกใช้เว็บเมทธอดแบบ asynchronous เท่าที่เป็นไปได้

การเรียกแบบ Asynchronous เป็นแนวคิดที่ดี สำหรับเว็บเมทธอด ซึ่งช่วยเพิ่มประสิทธิภาพเวลาประมวลผลได้อย่างดี
และแอพพลิเคชั่น ที่ขอใช้บริการ จะมีความยืดหยุ่น ในการทำงาน ในขณะที่มันรอการตอบกลับจากเว็บเซอร์วิส

วันจันทร์, กรกฎาคม 12, 2553

ทิป เว็บเซอร์วิส : กำหนดค่าเวลาสิ้นสุด (timeouts) ขณะเรียกใช้ synchronous

เว็บเมทธอด ควรจะตั้งค่า timeouts แทรกไว้ด้วย เพื่อป้องกันกรณี ที่มันทำงานค้างหรือ ประมวลผลคำสั่งผิดปกติที่
กินเวลานาน วิธีนี้ช่วยหลีกเลี่ยง ไม่ให้ไคลเอ็นต์แอพพลิเคชั่น ทำงานค้างไม่สิ้นสุด ในขณะรอการเรียกคืน ในเว็บเซอร์วิส
นอกจากนั้น เราสามารถตั้งค่า พร๊อพเพอร์ตี้ Timeout บน proxy class สำหรับไคลเอ็นต์เว็บเซอร์วิสได้
เว็บเซอร์วิส proxy class ได้พัฒนามาจาก คลาสหลักร่วมกัน ที่มีชื่อว่า WebClientProtocol ซึ่งมันได้จัดเตรียมค่า
พร๊อพเพอร์ตี้ timeout ที่กำหนดไว้

ตัวอย่าง :
Dim objWS As localhost.Northwind = New localhost.Northwind() ' Proxy Class
objWS.Timeout = 15000 ' ตั้งเวลาสิ้นสุดให้กับเว็บเมทธอดที่ 15 วินาที

การ แคชเนื้อหา เฉพาะส่วน (Fragment)

การแคชเนื้อหา บางส่วน เป็น ขั้นตอน การแคชเฉพาะส่วนของ ยูสเซอร์คอนโทรล ซึ่งเป็น ส่วนประกอบของเพจ ด้วยการแยก
ประมวลผลคำสั่ง ช่วยให้เราสามารถ แบ่งแยกเนื้อหาออกเป็นหน่วยย่อยหลายหน่วย และพักไว้ในหน่วยความจำ สำหรับส่วนอื่นๆ
ของเพจ ที่รองรับยูสเซอร์คอนโทรลสามารถ ประมวลผลคำสั่ง ได้ตามปกติ

เรานำ ไดเรกทีฟ OutputCache มาใช้โดยแทรก ไว้ภายในเพจ และยูสเซอร์คอนโทรล เนื่องจากมันจะช่วยแปลงค่าเนื้อหา
เพื่อพักข้อมูลเก็บไว้ในหน่วยความจำเครื่อง โดยไม่ต้องประมวลโค้ดคำสั่งของเพจะหรือยูเซอร์คอนโทรลใดๆ เมื่อมีการเรียกคำสั่งใหม่ และ วิธีดังกล่าวนี้ จะช่วยให้สามารถประหยัด การใช้ทรัพยากรระบบได้อย่างดี เพราะมันจะดึงข้อมูล มาจากหน่วยความจำ แทนที่จะไปดึงข้อมูลผ่านการประมวลโค้ดคำสั่ง และการประกาศค่าออปเจ็กต์ที่เกี่ยวข้อง เหมือนตอนเริ่มใช้งาน

การแคช ยูสเซอร์คอนโทรล ทำงานเหมือนกับ การแคชเพจ โดยแทรกไดเรกทีฟ OutputCache ถัดจาก คอนโทรลไดเรกทีฟ

วันศุกร์, กรกฎาคม 09, 2553

การแสดงค่า(Rendering) HTML อย่างมีประสิทธิภาพ

เคยสังเกตุว่าไหม เราไม่อาจที่จะเชื่อมต่อสตริงได้โดยง่าย ผ่าน เมทธอด Render()ภายในเซิร์ฟเวอร์คอนโทรล และส่งค่าไปยัง HtmlWriter เนื่องจาก การเชื่อมต่อสตริง (string concatenation) จะใช้โพรเซส ในส่วนของ การทำงานของทรัพยากรระบบมาก โดยเฉพาะอย่างยิ่ง หากเราจะต้อง เชื่อมสตริงจำนวนมาก และทำมันในหลายๆ ครั้งในเพจหนึ่ง สำหรับแสดงผลในคอนโทรลหนึ่ง การใช้ ออปเจ็กต์ StringBuilder เพื่อทำงานส่วนนี้จะให้ผลการทำงานที่เร็วมาก

ทั้งนี้ เรายังสามารถ ส่งผลลัพธ์ สตริงโดยตรงไปให้กับ HtmlWriter ได้เนื่องจากวิธีนี้ จะมีความเร็วกว่าการเชื่อมต่อสตริงในแบบ
ที่เราใช้บ่อยๆ (string concatenaton)

วันศุกร์, กรกฎาคม 02, 2553

การสร้าง Proxy Class ผ่านคอมมานด์ไลน์

เราสามารถ สร้าง Proxy Class เพื่อให้เราเรียกใช้เว็บเซอร์วิสได้ โดยเมื่อเรา พัฒนาโปรแกรมตัวเว็บเซอร์วิสเรียบร้อยแล้ว
ให้คอมไพล์ โดย ทูล WSDL (Web Service Description Languague) ผ่านทาง บรรทัดรับคำสั่ง (Command Prompt) Wsdl /l:vb http://www.yourhost/WebService.asmx?WSDL
จะได้ซอร์สไฟล์เป็น WebService.vb ก่อนที่เราจะนำไฟล์คลาสไปใช้ จะต้องคอมไพล์อีกครั้งด้วย คอมมานด์ไลน์ ของ
Visual Basic ดังนี้
Vbc /t:library /r:System.dll,System.Web.Services.dll,System.XML.dll WebService.vb
จะได้ซอร์สไฟล์เป็น WebService.dll ให้ทำการ Copy ไฟล์ไปไว้ใน Sub-directory “bin” ของ Web Client ที่เรียกใช้
*** ข้อควรระวัง การคอมไพล์ด้วยทูล WSDL ให้กำหนดเป็น ชื่อเซอร์เวอร์ หรือ คอมพิวเตอร์เนม แทน Localhost ไม่เช่นนั้นเว็บเซอร์วิสจะใช้ได้ เฉพาะ Local Machine เท่านั้น