347. Remoting proxy

בהמשך לפעמים הקודמות,

עוד שימוש שיש לProxies של Interface הוא Remoting:

נניח שיש לנו איזשהו ממשק, למשל:

1
2
3
4
5
6
public interface IBank
{
void Deposit(string id, int amount);
void Withdraw(string id, int amount);
int GetAvailableBudget(string id);
}

כעת יצרנו Proxy לממשק, כלומר יש לנו מחלקה שמנתבת את כל הפונקציות של הממשק לפונקציה בודדת.

1
2
3
private void Handle(MethodCallInfo methodCallInfo)
{
}

מה שאנחנו מסוגלים לעשות עם זה, זה להעביר את הקריאות האלה למתודה חיצונית – מתודה שתקרא על מחשב אחר למשל.

איך נעשה את זה? נצטרך להמיר את הMethodCallInfo לאיזשהו אובייקט שאפשר להעביר ברשת.

במחשב השני תהיה אפליקציה שתאזין להודעות כאלה ותקרא לפונקציה מתאימה.

בנוסף, אפליקציה זו תחזיר הודעה שמתארת את התוצאה של הפונקציה, למשל מה ערך ההחזר, או האם קפץ Exception.

בפונקציה שאליה נכנס (Handle) נצטרך לבצע את ההמרה של הMethodCallInfo להודעה מתאימה, לשלוח את ההודעה, לקבל את התשובה, ולהכניס לMethodCallInfo את התוצאה שחזרה/Exception שחזר.

קיימים מספר מימושים לרעיון זה, למשל WCF הוא Framework המאפשר ליצור Proxy שיודע לשלוח הודעות SOAP לService מרוחק ולהחזיר תשובה.

המשך יום מיופה כוח טוב.

שתף