locked
שירותי WCF אסיכנרוניים RRS feed

  • שאלה

  • 1.

    יש אפשרות להגדיר שירות שהוא אסינכרוני ברמת ה CONTRACT

    בעזרת [OperationContract(AsyncPattern = true)]

    מצד שני יש אפשרות להריץ TASK או THREAD בצד ה לקוח ולהשתמש ב CONTRACT שהוא לא אסינכרוני

    מה מומלץ ומתי?

    שבת 15 ספטמבר 2012 11:05

תשובות

  • פעולות אסינכרוניות בצד קליינט נועדו לדוגמה בשביל הסיבות הבאות:

    1. בשביל לא לתקוע את ה-ui thread בזמן המתנה לתשובה מהשירות ובכך לגרום לאפליקציה להראות תקועה (מסך קפוא).

    2. בשביל להריץ כמה בקשות במקביל מכמה שירותים, כאשר אין תלות ביניהם, בשביל לחסוך זמן

    פעולות אסינכרוניות בצד שרת (ב-contract) נועדו בעיקר למצבים בהם רוצים לפנות threads כאשר מבצעים פעולות io כגון פניה לדיסק או לרשת (עבודה עם קבצים, DB, קריאה לשירות אחר ברשת) - מצבים בהם רוב העבודה היא IO ולא CPU. במקרים כאלו עבודת ה-IO יכולה להתבצע ברקע ללא thread מה-threadpool (לרוב פעולות אלו יש קריאות אסינכרוניות) באמצעות contract אסינכרוני ולקבל חזרה thread כאשר הפעולה מסתיימת. מצב זה מאפשר חסכון במשאבי השירות (threads בעיקר).


    Please mark posts as answers/helpful if it answers your question.
    Senior Consultant on WCF, ASP.NET, Siverlight, and Entity Framework. Author of Microsoft's Official WCF 4 Course. Co-author of the Microsoft HPC/Azure burst whitepaper.
    Visit my blog: http://blogs.microsoft.co.il/blogs/idof

    • סומן כתשובה על-ידי NoundaDee שבת 15 ספטמבר 2012 15:23
    שבת 15 ספטמבר 2012 13:38
    מנחה דיון