במאמר זה אסביר על בניית רכיבי COM ושילובם בדפי הASP
מייקרוסופט העניקה לסביבת הפיתוח ASP רכיבים עשירים ואפשרויות מגוונות, כמו למשל ה-ADO שעוזר לנו להתחבר
בקלות למסדי נתונים ולבצע מולם פעולות או רכיב מערכת הקבצים (FSO) שמאפשר לערוך,
למחוק, וליצור קבצים בשרת. אם הזדמן לכם לעבוד עם אחד מהאובייקטים האלה, אתם בוודאי
יודעים שליצירת מופע של האובייקט משתמשים בסיינטקס:
in VBs: dim x; set x=server.createobject("adodb.connection")
in Js: var x; x= new ActiveXObject("Scripting.FileSystemObject")
כפי שאתם רואים, המתכונת ליצירת האובייקט היא:
in VBs: dim x; set x=server.createobject("project.class")
in Js: var x; x= new ActiveXObject("project.class")
רכיבי ברירת המחדל שמייקרוסופט מספקת עם סביבת הפיתוח ASP עוזרים לנו הרבה פעמים
להקטין את מספר שורות הקוד, כמו למשל הADO שבלעדיו, היינו צריכים לכתוב שורות קוד
רבות על מנת להתחבר לבסיס נתונים. הרכיבים הכתובים כDLL או אם תרצו רכיב COM,
כתובים בשפת תכנות עילית, והקוד שבהם עובר הידור לפני השימוש בו. קוד שעבר הידור או
קימפול לשפת מכונה, ירוץ הרבה יותר מהר על השרת מאשר קובץ ASP רגיל הכתוב כקובץ
טקסט פשוט.
בנוסף לכך, רכיבי COM בהיותם מהודרים, הרבה יותר מוגנים מקוד סקריפט
פשוט ובמקרים רבים נעשה בהם שימוש על מנת להגביר את ההגנה מפני חשיפת פרטי מיקום
וסוג מסד הנתונים. חישבו לרגע, מה יכול לעשות אדם שפרץ לשרת שלכם, שבמקרה מכיל מידע
חשוב, כמו סיסמאות גישה של לקוחות. אדם כזה יוכל לפתוח את קבצי הASP ללא בעיה
ולהשיג את מיקום מסדי הנתונים שמכילים את המידע, פתרון עסקי חשוב שרכיבי הCOM
מספקים נגד חבלות כאלה הוא שימוש ברשת חצי מוגנת, אשר מכילה את קבצי ה-ASP שאליהם
צריכים הגולשים להגיע דרך האינטרנט, אולם, קבצי ה-ASP יכילו בסך הכל יצירת מופע של
רכיבי COM שבהם ימצאו הכתובות למסדי הנתונים. רכיבי ה-COM ישבו ברשת מאובטחת בייחד
עם מסדי הנתונים ובכך גם אם ייפרץ השרת, לא יוכלו הפורצים להשיג מידע על מסדי
הנתונים
בניית רכיבי COM בVISUAL BASIC כשפתחה מייקרוסופט את אסטרטגיית הCOM(Component
Object Model) החדשה, לקחה על עצמה אתגר ליצור סביבה שבה יוכלו מפתחים בבייסיק
לדוגמא, להשתמש ברכיב הבנוי בשפת JAVA או בC++, ולקרוא לשיטות והמאפיינים המצויינים
ברכיב מתוך קוד הכתוב בכלל בשפת תכנות אחרת וכיוצא מכך, ניתן לבנות רכיבי COM כמעט
בכל שפת תכנות מונחית עצמים(OOP). שני שפות המומלצות ביותר לבניית רכיבים הן VB
וc++/c למרות שבייסיק נחשבת לשפה מגושמת מדי, ולעומתה C++ הרבה יותר טובה, אתמקד
במאמר זה ביצירת רכיבים בשפת בייסיק(באופן כללי, ניתן לבנות רכיבים אפילו בJAVA אבל
קוד הכתוב ב-JAVA מהודר לקוד מכונה וירטואלי שה-JVM מהדר לקוד מכונה רק בזמן ריצתו,
נחשב לאיטי למדי, אף על פי שקוד כזה יוכל לרוץ על כל סוגי המכונות בהם מותקן
הJVM-JAVA VIRTUAL MACHINE
שלבי היצירה
על מנת לכתוב ולהדר את הרכיבים והדוגמאות כאן, יידרש לך מהדר ויזואל בייסיק. בעת
פתיחת סביבת הפיתוח של בייסיק, ייפתח תפריט בחירת סוג הפרוייקט. הסוג המומלץ ביותר
הוא DLL למרות שתוכל גם לכתוב את הרכיב כתוכנית עצמאית (EXE). אם בכל זאת תבחר
בACTIVEX EXE תקבל ייתרון כיוון שתכנית הכתובה כ-EXE מתרחשת כתהליך נפרד וכך גם אם
תתרחש תקלה בעת ריצתו, שאר היישומים לא יפגעו וירוצו כרגיל. בתור התחלה כדאי שתבחר
בDLL.
לאחר בחירת סוג הפרוייקט, תיפתח לפניך סביבת המהדר בה תאלץ לשנות את שם המחלקה
בתיבת התכונות שבצד(ברירת המחדל היא CLASS 1). שנה את שם המחלקה לPRG. אם תרצה,
תוכל גם לשנות את שם הפרוייקט, אך אנו נעבוד ביינתיים עם ברירת המחדל(PROJECT 1).
השלב הבא יהיה כתיבת התכנית. בתכנית ההדגמה שלנו, ניצור פונקציה שתדע לחבר שתי
מחרוזות שהתקבלו מתוך דף ה-ASP ולשלוח אותם חזרה אל הדף לשם כתיבתם. כאשר סמן הטקסט
נמצא על גבי משטח העבודה, הקלד את הקוד הבא:
Public function strplus(str_a as string, str_b as string) as string
strplus = str_a & str_b
End function
לאחר כתיבת הקוד, יהיה עלינו להפוך את הרכיב שלנו לזמין לקבצי ה-ASP הנמצאים בשרת,
את זה נעשה ע"י רשימתו ברג'יסטרי של השרת. אם אתם כותבים את הקוד במחשב השרת, סביבת
הפיתוח של בייסיק תעזור לכם ברישום. כדי לרשום ולשמור את האובייקט לכו לתפריט
FILE -> MAKE PROJECT1.DLL כאשר תעשו זאת, יירשם האובייקט ברישום המערכת
כ-PROJECT1.STRPLUS. אם אתם כותבים את הקוד במחשב הביתי ורוצים לרשום אותו במחשב
אחר, תצטרכו לרשום אותו באופן ידני.
כעת, לאחר שהאובייקט כבר רשום, נצטרך לבצע מופע שלו בקובץ ה ASP על מנת להשתמש
בשיטה שלו (שכמובן, מחברת שתי מחרוזות ששולחים אליה ומוסיפה ביניהם תו רווח). כדי
לבצע מופע של האובייקט, נשתמש בסיינטקס הבא:
in VBs: dim x set x=server.createobject("Project1.prg")
in Js: var x; x= new ActiveXObject("Project1.prg")
לאחר שיצרנו מופע של האובייקט, נשתמש בשיטות
שלו ע"י הקוד:
s=x.strplus("yitzik","nakash")
response.write "my name is: " & s
להלן הקוד המלא בVBS
<%
dim x,s
set x=server.createobject("Project1.prg")
s=x.prg("yitzik","nakash")
response.write "my name is: " & s
%>
כעת הריצו את קובץ ה-ASP על השרת וצפו בתוצאות. דוגמא זו באה רק להראות את הבסיס
ליצירת הרכיבים ולשימוש בהם, אך כמובן שלא נשתמש ברכיב COM רק לשם חיבור מחרוזות
אלא ליישומים מורכבים יותר.
שימוש ברכיבים קיימים מתוך הרכיב שלנו
אחד השימושים הנרחבים ביותר של רכיבי הCOM הוא בעבודה עם מסדי הנתונים, אך אם אתם
לא מנוסים בכתיבת קוד בשפת בייסיק, אתם בטח תשאלו איך בכלל להתקשר אל מסד הנתונים
מהרכיב. כאמור,אחת הסיבות שמייקרוסופט פיתחה את טכנולוגיית ה-COM היא כדי לעזור
למפתחים לצמצם כמה שיותר את הקוד שעליהם לכתוב, את זאת הם עשו על ידי מתן האפשרות
ליצור קישור בעת כתיבת הקוד, אל רכיבים קיימים וכיוצא מכך, תוכלו ליצור REFFERENCE
אל רכיבים אחרים שאתם כתבתם או אל הרכיבים שמייקרוסופט סיפקה לכם (ADO,FSO...).
הדוגמא הבאה תהיה יצירת תכנית המקבלת שם של חיה מתוך קוד הASP, ומוציאה את
הפרטים עליה ממסד הנתונים במסגרת רכיב ה-COM:
צור פרוייקט חדש מסוג DLL בסביבת
הפיתוח של בייסיק. שנה את שם הפרוייקט לANM ואת שם המחלקה לDETAIL_ANM.
כעת, יהיה עליך ליצור REFFERENCE אל רכיב ה-ADO המותקן בשרת ורשום ברג'יסטרי, את זאת
תעשה ע"י בחירה בתפריט: PROJECT-> REFERENCES תיפתח לפניך תיבה המציגה רשימה של
כל האובייקטים המותקנים בשרת, בחר ב MICROSOFT ACTIVEX DATA OBJECTS 2.1 LIBRARY
ולחץ על אישור.
עכשיו נשאר לך לכתוב את הקוד עצמו:
public function animal(name as string) as string
dsn="my_dsn_name"
dim rs as new adodb.recordset
rs.open "select * from anm where name='"&name,dsn
animal=rs("datail")
rs.close
set rs=nothing
End function
לפני שנריץ את הקוד, נעבור קצת על אופן הכתיבה: בשורה הראשונה נמצאת הגדרת הפונקציה
והפרמטרים שהיא מקבלת. הגדרת הפונקציה בקוד שלנו מציינת שהיא מקבלת פרמטר מסוג
מחרוזת ומחזירה ערך מסוג מחרוזת
בשורה השניה אנו מגדירים את שם הקישור למסד
הנתונים
בשורה השלישית אנו יוצרים אובייקט RECORDSET ונותרים לו את השם RS ,
שימו לב לשוני בין יצירת מופע לאובייקט בASP לעומת VB.
בשורה הרביעית אנו
פותחים את סט הרשומות ונותנים לו את הפרמטרים הרגילים של מחרוזת SQL ואת שם הקישור
למסד הנתונים
בשורה החמישית אנו "מעניקים" למשתנה ANIMAL את מחרוזת תיאור בעל
החיים
בשורות השישית והשביעית אנו סוגרים את הרקורדסט ומנקים את משאביו
בשורה השמינית אנו סוגרים את הפונקציה
כעת, נהדר ונרשום את הרכיב בשרת כמו שעשינו בדוגמא הראשונה וניצור את קובץ
ה-ASP הבא:
<%
who=request.form("name")
if who<>"" then
Dim rec
Set rec=server.createobject("anm.detail_anm")
Response.write "מידע על"&who&"
"&rec.animal(who)
else
Response.write ""
end if
%>
כעת הרץ את קובץ ה-ASP על השרת שלך וראה את התוצאות אך לפני כן וודא
שיש לך כבר DSN מוגדר עם השם שרשמת בקוד הויזואל סייסיק שמצביע על מסד נתונים עם
המבנה הבא: טבלה בשם ANM המכילה את השדות הבאים: 1. שדה שם מסוג מחרוזת בשם NAME 2.
שדה פרטים מסוג מחרוזת בשם DETAIL
קריאה לרכיבי COM הנמצאים בשרת אחר
לעתים אנו רוצים לחלק משימות בין מחשבים שונים כדי לא להטיל עומס על שרת אחד. פעולה
זו אפשרית על ידי קריאות לרכיבי COM ברחבי הרשת. לפני שאנו מבצעים אסטרטגייה של
פיזור תכניות על גבי מחשבים שונים, עלינו לבדוק האם זה בכלל יעזור במהירות ביצוע
הקוד או להיפך: אם הקוד שלנו קטן, הזמן שיקח לקריאה למחשב אחר להתבצע, יהיה יותר
ארוך מאשר אם נריץ אותו על אותו מחשב, לעומת זאת כשהקוד ארוך ומסובך, עדיף לשלוח
קריאה מהשרת שמכיל את קבצי ה-ASP אל שרת אחר שמכיל את רכיב ה-COM ובכך להגביר את
מהירות הביצוע.
קריאות לרכיבי COM ברשת האינטרנט אפשריות על ידי מספר שיטות,
אסביר על חלקן:
DCOM- DISTRIBUTED COM בטכנולוגיה זו אנו מבצעים קריאה לרכיב אחר אחרי שהגדרנו
בשרת תכנית שתטפל בכך עם ויזואל בייסיק. ניתן גם ליצור קריאות CORBA וRMI שמשתמשות
הרבה פעמים בפרוטוקולים הנמוכים כמו TCP/IP או UDP, פרוטוקולים אלה מאפשרים יצירת
קשר רציף בין מחשבים ולאכן הם יכולים לעזור, אך ישנם מקרים בהם השרת מוגן על ידי
FIREWALL ואז לא תמיד ניתן להשתמש בפרוטוקולים אלה ואז צריך לעבור לפרוטוקול גבוהה
יותר כמו HTTP. בעיה נוספת עם DCOM היא שלא ניתן להעביר את הקריאה בין סוגי מחשבים
שונים כי קוד הבסיס שלהם הוא שונה.
SOAP בעזרת SOAP אפשר לקרוא לרכיבים ולשלוח
להם מידע בשפת XML. עוד מידע על SOAP תמצאו במאמר אחר שכתבתי שעוסק באופן השימוש
בו.
לסיכום
תארתי במאמר זה דרכים לשימוש ברכיבי COM וליצירתם. רוב הפורטלים הגדולים משתמשים
ברכיבים כאלו לשם ביצוע יעיל של הקוד. הרכיבים הם הרבה יותר מקוד טקסטואלי פשוט אלא
בנויים מקוד מכונה שרץ ביתר קלות. לא יכולתי להביא לכם דוגמאות מוכנות כיוון שאני
כותב בC++ ואין לי את המהדר של בייסיק, ואני ממליץ גם לכם לעבור לC++ שהיא הרבה
יותר חזקה מביסיק. אבל את הבסיס ליצירת הרכיבים, העדפתי ללמד בביסיק בגלל הפשטות
שלה(דוה).
ביי ובהצלחה!!!
|