ארכיטקט-ידיים-מלוכלכות, מס’ 5 – שימור רכיבי VB6 בעידן ה-WCF
השקעת שנם בלפתח את הרכיבים שלך ב-VB6 ועכשיו אתה מתלבט מה לעשות איתם. יש מצב?
בזמן שאתה מלבט אתה חייב להמשיך לפתח יכולות חדשות וגם להשתמש בקיימות. יש מצב?
אחד ההתלבטויות זה איך לחסוף את הפונקציונאליות הקיימת המפותח ב-VB6 כשירותי WCF. יש מצב?
תסריט מס’ 1 – חשיפת VB6 כשירות WCF
הדרך הכי פשוטה לטעמי היא לפתח את שירות ה-WCF ב-Net Fx, לעשות Reference לרכיב ה-COM שלי וגמרנו. כאשר עושים Reference ל-COM אז VS יוצר שכבת אינטגרציה בין COM ל-Net Fx הנקרא Runtime Callable Wrapper או RCW שדרכו רכיב ה-COM מופעל ע”י רכיב Net Fx.
אני מעדיף ליצור את שכבת ה-RCW באופן ידני בגלל שזה נותן יכולות שליטה רחבות יותר – כמו חתימה עם SNK וגם בגלל שזה כיף יותר – LOL.
הנה השלבים:
- צור רכיב VB6 בעזרת Visual Basic 6.0 [אחחחח, נוסטלגיה :)]
- צור RCW בעזרת TLBIMP תוך כדי חתימה עם SNK
c:\>tlbimp C:\VB6ProjectLibrary.dll" /keyfile:"C:\VB6WrapperKey.snk" /out:"C:\\NetWrapper.VB6ProjectLibrary.dll
- מתוך פרויקט של Net Fx צור Reference ל-Wrapper שיצרת [NetWrapper.VB6ProjectLibrary.dll]
- תפעיל את הרכיב בתוך try, תפוס Exceptions ב-catch והכי חשוב [!!!] זה מה תכתוב ב-finally:
// Make sure that the underlying COM object is immediately freed
while (System.Runtime.InteropServices.Marshal.ReleaseComObject(vb6Class) != 0) ;
//FOR NET FX 2.0 and UP
//System.Runtime.InteropServices.Marshal.FinalReleaseComObject(vb6Class) ;
תסריט מס’ 2 – צריכת WCF ע”י VB6
הדרך שאני חושב הכי כיפית היא לצרוך WCF ע”י רכיב .Net Fx ואת רכיב Net Fx לחשוף לצריכה ל-COM. הנה השלבים לחשיפת רכיב Net Fx לצריכה ל-COM:
- צור Interface עם attributes שיאפשרו צריכה בעולם ה-COM:
[Guid("E0281197-1174-4d48-92EA-19FFC3B4EF63")]
[InterfaceType(ComInterfaceType.InterfaceIsIDispatch)]
public interface _COMCallableClass
- צור Type שיורש מה-Interface עם עוד כמה attributes – אתה בטח מזהה מה יהיה השימוש של ה-Attributes
[Guid("2CA46DE2-0502-4ae9-9763-D57EFA3E9457")]
[ClassInterface(ClassInterfaceType.None)]
[ProgId("COMCallableNetComponent.COMCallableClass")]
public class COMCallableClass : _COMCallableClass
- תסמן את הרכיב כ-COM Visible
- רשום את הרכיב לצורך צריכה בעולם ה-COM
C:\>regasm /codebase "C:\COMCallableNetComponent.dll" /tlb:"C:\ COMCallableNetComponent.tlb"
- אופציונאלי – אתה יכול לרשום אותו ב-GAC בעזרת gacutil
- בסביבת VB 6 תוסיף reference לרכיב שלך:
- תפעיל בתוך הקוד של VB6 שלך:
איך אתה משמר את רכיבים ה-VB 6 שלך? איך אתה מתכנן לבצע מיגרציה מ-VB 6?
שירותי MCS רלוונטיים
חומר רלוונטי
שמי אליק לוין ואני מתרכז ב- Architecture, Security, and Performance באפליקציות Net.
בזמני הפנוי אני מפתח את עצמי בתחומים רבים אחרים.
This template is made with PracticeThis.com plugin for Windows Live Writer