المؤلف: Dflying Chen ( http://dflying.cnblogs.com/ )
تستدعي السلسلة السابقة من المقالات خدمة ويب واحدة مباشرةً، ومع ذلك، في التطوير الفعلي للمشروع، خاصة عند تحويل المشاريع الحالية، غالبًا ما يؤدي استخراج المنطق الموجود في الصفحة إلى خدمة ويب متخصصة إلى قدر كبير من العمل. يأخذ Atlas ذلك في الاعتبار ويسمح لك بإضافة سمة [WebMethod] إلى الطريقة العامة من جانب الخادم للسماح بالمكالمات المباشرة من JavaScript من جانب العميل.
للسماح للعملاء باستدعاء الأساليب المحددة في صفحات ASPX مباشرة، تحتاج إلى تحديد الطريقة على أنها عامة وإضافة سمة [WebMethod]، مثل الطريقة التالية من جانب الخادم المحددة في ملف ASPX:
<script runat="server">
[طريقة ويب]
كثافة العمليات العامة AddInt (int int1، int int2)
{
عودة int1 + int2؛
}
</script>
من جانب العميل، سيقوم Atlas بدمج أسلوب AddInt JavaScript نيابةً عنك، والموجود في مساحة اسم خاصة PageMethods، بحيث يمكنك استدعاء الأسلوب أعلاه من خلال PageMethods.AddInt().
في الوقت نفسه، من خلال تحديد WebMethod في صفحة ASPX، يمكنك أيضًا الوصول إلى القيم وحالة العرض الخاصة بعناصر التحكم من جانب الخادم في جميع الصفحات بهذه الطريقة، وستكون دورة حياة الصفحة بأكملها هي نفسها سيتم استدعاء PostBack لصفحة ASP.NET التقليدية، مثل Page_Load، وجميع الطرق الأخرى، مما يسمح لنا بوصول أقوى إلى الصفحة. ومع ذلك، فإن هذا يؤدي أيضًا إلى انخفاض الأداء، لأنه في كل مرة يتم فيها استدعاء طريقة الويب، سيتم إرجاع قيم حالة العرض والتحكم الموجودة على الصفحة إلى الخادم، وتتم معالجة دورة حياة الصفحة بأكملها من جانب الخادم ستكون أطول من مجرد معالجة خالصة. تعد طريقة الويب المحددة في ASMX أكثر تعقيدًا. لذا أوصي هنا باستخدام خدمة الويب الخالصة قدر الإمكان، يرجى الرجوع إلى: يوصى باستخدام خدمة الويب بدلاً من طريقة الصفحة في التنفيذ من جانب خادم Atlas.
دعونا نلقي نظرة على مثال أولاً، دعونا نحدد WebMethod في ASPX. يمكنك أن ترى أنه لا يقوم فقط بالعثور على مجموع رقمين، ولكنه يصل أيضًا إلى قيمة TextBox من جانب الخادم على الصفحة:
<script runat="server". ">
[طريقة ويب]
سلسلة عامة AddInt (int int1، int int2)
{
return (int1 + int2).ToString() + string.Format("rnونص Server TextBox هو '{0}'.", tbServer.Text);
}
</script>
ثم هناك ScriptManager للصفحة ليست هناك حاجة لإضافة أي مراجع هنا: <atlas:ScriptManager ID="scriptManager" runat="server" />.
ثم هناك مدخلان يستخدمان لإدخال الإضافة ومدخل يستخدم لتشغيل استدعاء الخادم:
<input id = "value1" type = "text" value = "1" />
<معرف الإدخال = "قيمة 2" نوع = "نص" قيمة = "2" />
<input id = "btnAdd" type = "button" value = "Add!" onclick = "return btnAdd_onclick ()" />
يوجد أيضًا TextBox من جانب الخادم:
<asp:TextBox ID="tbServer" runat="server" Text="Server control"></asp:TextBox>
الأخير هو استدعاء JavaScript. انتبه إلى مساحة الاسم المضمنة في PageMethods:
function btnAdd_onclick() {.
PageMethods.AddInt(
$('value1').القيمة،
$('value2').القيمة،
عند الاكتمال
);
}
دالة على الاكتمال (النتيجة)
{
تنبيه (نتيجة)؛
}
قم بتشغيله في المتصفح، وأدخل إضافتين، ثم أدخل بعض الأحرف في TextBox على جانب الخادم، وانقر فوق "إضافة"، يمكنك أن ترى أنه تم الوصول إلى قيمة TextBox على جانب الخادم:
هذا هو إرسال الشبكة الذي اعترضه Fiddler. يمكنك أن ترى أن كلاً من ViewState وTextBox يتم تمريرهما مرة أخرى إلى الخادم:
يمكن تنزيل الكود المصدري لهذا البرنامج النموذجي هنا: