الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

الجزء الثانى : الإتصال بدوال Server-Side من خلال Client-Side

بدأه Ahmed Moosa في 19 نوفمبر 2010 · 3 رد · 810 مشاهدة · في ASP.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم ورحمة الله

الجزء الثانى

العمل مع Web Service وكيفية العمل معها من خلال Ajax

كنا قد رأينا الدرس الأول من هذة السلسلة من هنـــــــــــــــــــــــــــا

للتذكير:

فى الدرس الأول تم التقديم لهذة الدروس على انها للأتصال بالـServer من خلال Client وذلك لمنع حدوث رحلة العودة من وإلى الخادم/العميل وهى ما نسمية PostBack مما قد يحسن أداء وجودة العمل مع الموقع الذى يعمل بهذة الطريقة فى الإتصال بقواعد البيانات .

المقدمة : هنا سنتعامل مع Web Service وكيفية العمل مع قواعد البيانات من خلال LINQ to SQL وكذلك فصل الأكواد عن بعضها البعض

الدرس :

لا تحتاج web service إلى الكثير من كتابة الأوامر حتى يتم الإتصال بها وتنفيذ امر ما . فهى نفس طريقة عمل PageMethods وهنا أقصد انه لابد من وجود Proxy كما أشرنا إليه فى الدرس السابق ولكن هذة المرة سيتم تقديم الدعم بما يعرف بــ Intel sense وستعمل مع web service وكانك تكتب كود C# او VB . كما بالشكل :

post-223130-020292400 1290169701_thumb.p

وذلك لإن Web service تدعم خاصية تسمى ScriptService والتى تسمح برؤية إسم

Web service class فى نطاق العمل مع اكواد JavaScript وبالتالى رؤية الدوال التى تم إنشائها داخل web service. وذلك عند تعريف ScriptService Attribute كما بالشكل :

post-223130-019306200 1290169747_thumb.p

وكما أشرنا إلى Proxy فسيتم إدراج الأوامر الخاصة به وإن شئت قل إدراج إعداداته بإستخدام أداة

Script Manager . وتعريف ملف Web service ضمن مجموعة Services التى تخدمها وتديرها هذة الاداة كما ترى بالشكل:

    <asp:ScriptManager ID="ScriptManager1" runat="server">
        <Services>
            <asp:ServiceReference Path="~/WebService.asmx" />
        </Services>
    </asp:ScriptManager>

وإذا ما أردت أن ترى أعدادت Proxy ما عليك سوا ان تقوم بتفعيل الخاصية

InlineScript = true ومن ثم رؤية View Source . كما بالشكل :

<asp:ServiceReference Path="~/WebService.asmx" InlineScript ="true"  />

ومنها إلى JavaScript لنستدعيها ونستخدم ما نريد من الدوال المعرفه بها . مثال ذلك الدالة الإفتراضية

HelloWorld . ونجد ان آليه العمل واحدة فى اننا نجد أن لدينا داليتن وهما onsuccess و onfailed .

مثال مبسط :

WebService.HelloWorld(onsuccessFunction , onFailedFunction );

فى حين أن هناك دالتين بالأسماء السابقة قد تم تعريفهما من قبل ويعودان بالنتائج لعرضها .

فنجد أن :

WebService >> إسم Class المعرفه فى ملف Web Service .

HelloWorld << دالة توجد فى ملف Web Service .

onsuccessFunction >> دالة توجد فى نفس الملف فى كود JavaScript أو ملف منفصل كما سنرى وتعمل على إستقبال النتائج من الدالة HelloWorld فى حالة نجاح عملية الإتصال.

onFailedFunction >> دالة توجد فى نفس الملف فى كود JavaScript أو ملف منفصل كما سنرى وتعمل على إستقبال النتائج من الدالة HelloWorld فى حالة فشل عملية الإتصال .

إليك تمرين :

النتائج التى سنحصل عليها من التمرين :

post-223130-037629100 1290169956_thumb.p

ما تراه هو عرض لبعض البيانات فى أداة DropDownList وعند إختيار أحد عناضر هذة القائمة يتم عرض التفاصيل أسفلها كما ترى .

مبدئياً سنعمل على فصل الاكواد عن بعضها فى ملفات منفصلة فسيكون لدينا ثلاث ملفات :

- ملف Web service .

o وبه سنجد عملية الاتصال بقاعدة البيانات من خلال إستخدام LINQ to SQL

 دالتين : احدهما لعرض بيانات فى DropDownList والآخرى لعرض التفاصيل.

- ملفات التعامل مع قاعدة البيانات Linq to Sql .

o يتم إدراج جدول واحد لتيسير العمل فى هذا الدرس وهو جدول Categories من قاعدة البيانات الشهيرة Northwind .

- ملف صفحة ASPX

o بها اداة بالطبع أداة ScriptManager وكذلك DropDownlist وأيضاً Div ليكون هو المساحة المستخدمه لعرض التفاصيل .

- ملف Js

o بها pageLoad Event ويعمل هذا الحدث كـحدث onload للصفحة ويعمل فى حالة وجود ScriptManager لإنه من الأحداق التى تقدمه Ajax Life Cycle .

o أيضاً به دالتين :

 الأولى : الإتصال بـWebService ومن ثم عرض النتائج فى DropDownList.

 الثانية: الإتصال بـ WebService ومن ثم تمرير Parameter إليها والعودة بالبيانات التى تم إختيارها بناءاً على ما تم تمريره .

 

العمل فى خطوات :

1- قم بإنشاء صفحة aspx وضع بها DropDownlist وكذلك div وسترى المحتويات بالكامل بالأسفل.

2- قم بإختيار Linq to SQl وأدرج بها الجدول الذى تريد العمل معه .

3- قم بإنشاء Web Service وأنشئ بها دالتين ستجد التركيب الخاص بهم فيما يلى .

4- قم بإنشاء ملف Javascript وبه سنضع حدث pageLoad وكذلك دالتين لمحادثة web Service.

5- قم بضبط Script Manager من حيت تعريف ملفات scripts وكذلك ملفات Services .

والآن مع تركيب الملفات المستخدمة فى هذا التمرين :

صفحة .aspx

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="WebServiceTest.aspx.cs" Inherits="WebServiceTest" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <asp:ScriptManager ID="ScriptManager1" runat="server">
        <Services>
            <asp:ServiceReference Path="~/WebService.asmx" />
        </Services>
        <scripts>
            <asp:ScriptReference Path="~/WebServiceScript.js" />
        </Scripts>
    </asp:ScriptManager>
    <div>
       <br />
       <asp:DropDownList ID="CategoriesDDL" runat="server" 
                          onchange ="GetDetails(this);" >
        </asp:DropDownList>
        <br />
    </div>
    <br />
    <div id="SomeDiv">
    </div>
    </form>
</body>
</html>

 

ملفات LINQ to SQL

بعد إدراج جدول Categories

post-223130-019305600 1290170085_thumb.p

كما سترى فى ملف WebService التالى إستخدام هذا الجدول لعرضه فى DropDownlist .

ملف WebService.asmx

 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Services;

/// <summary>
/// Summary description for WebService
/// </summary>
[WebService(Namespace = "http://mySite.com/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
// To allow this Web Service to be called from script, using ASP.NET  //AJAX, uncomment the following line. 
[System.Web.Script.Services.ScriptService]
public class WebService : System.Web.Services.WebService {

    public WebService () {
        //Uncomment the following line if using designed components 
        //InitializeComponent(); 
    }

    [WebMethod]
    public List<Category> GetCategoriesByID(int SelectedCategoryID)
    {
        DataClassesDataContext dc = new DataClassesDataContext ();
        var query = from q in dc.Categories
                    where q.CategoryID == SelectedCategoryID
                    select q;
        return query.ToList<Category>();
    }

    [WebMethod]
    public List<Category > GetCategoryName()
    {
        DataClassesDataContext dc = new DataClassesDataContext();
        var query = from q in dc.Categories
                    select q;     
        return query.ToList<Category>();
    }
}

ملف WebSeriveScripts.js

function pageLoad() {
      FillDropdownlist();
}

// Fill Drop Down list 
function FillDropdownlist() {
    var DDl = document.getElementById("CategoriesDDL");
    WebService.GetCategoryName(function (data) {
        for (var i = 0; i < data.length; i++) {
            var myoption = new Option(data.CategoryName, data.CategoryID);
            if (DDl != null) {
                DDl.options.add(myoption);
            }
            else {
                alert("I have an Erro in DropDownlist Method");
            }
        }
        GetDetails(DDl);
    },
    function (err) {
        alert(err.get_message());
    });
}

// Fill FillGridView list
function GetDetails(obj) {
    var SomeDiv = document.getElementById("SomeDiv");
    var val = obj[obj.selectedIndex].value;
    WebService.GetCategoriesByID(val, function (result) {
        SomeDiv.innerHTML = "<span><b>Category ID </b>: " + result[0].CategoryID + "</span><br/><span><b>Category Name </b>: " + result[0].CategoryName + "</span>";
    },
     function (err) {
         alert(err.get_message());
     });
 }

إن واجهك شئ غامض فى الملفات السابقة قم بالعودة إلى أعلى لترى الوصف لهذة الملفات .

إلى هنا إنتهى الجزء الثانى مع AJAX .

المرفقات
WebServeiceIntellsense.pngScriptService.PNGResult.pngCategoryDA.PNG

تم تعديل هذه المشاركة بواسطة Ahmed Moosa في 19 نوفمبر 2010 في 18:51

Ahmed Moosa

Microsoft Community Contributor | MCC

Microsoft Certified Professional Developer | MCPD

Microsoft Certified Technology Specialist | MCTS

Senior .NET Developer

.Net Trainer

English blog : http://weblogs.asp.net/ahmedmoosa/

مدونة عربى : http://ahmedmoosa.wordpress.com/

#2

انت ثروة للمنتدى .. جزاك الله خير , ونتنظر المزيد

اللهم أطل عمري وأحسن عملي واختم بالشهادة أجلي

#3

جهد تشكر عليه أخي الكريم ..

دروس و كتب مفيدة----------------------كتيب الإجرائيات المخزنةتعرف على اللغة Transact SQL <<-->> كتيب عن تنصيب قواعد البيانات Sql Server باللغة العربية كتيب عن إنشاء قواعد البيانات في SQL Server باللغة العربية <<-->> درس مع الأمثلة عن المؤشرات و التعامل معها في الـ T-SQLالعبارات الشرطية و الحلقات في T-SQL <<-->> شرح لبعض الـ Extended Stored Procedure استخدام مكتبات الـ Dot Net الخاصة بك في الـ Sql Server 2005 <<-->> التعامل مع المصفوفات من خلال الـ T-SQLتعابير الجداول الشائعة في SQL Server 2005 <<-->>الاتصال بالأداة SQL Server Management Studioحلول سريعة و لمحات برمجية --------------------------------التصدير إلى إكسل : طريقة أولى : طريقة بسطر واحد من الكود <<-->> طريقة ثانية : طريقة تحتاج إنشاء إجرائية مخزنةً تجهيز بيانات جدول بالصيغة XML تمهيداً لحفظها كملف <<-->> تصدير البيانات إلى ملفات نصية برمجياً إغلاق جميع الإتصالات المفتوحة بقاعدة بيانات محددة .. تمهيداً لاسترجاعها أو حذفها <<-->> الاستعلام بناء على وقت مخزن بالصيغة العربية ضمن حقل نصي ..حذف السجلات المتكررة و إبقاء عدد محدد منها في جدول.. <<-->> أسرع طريقة لحذف سجلات جدول كيف احصل على اسم جهازي والباسوورد باستخدام T-SQL <<-->> حشر أنواع الصور المختلفة في حقل من نوع Image باستخدام إجرائية مخزنة .كيف تعرف أنواع الصور المخزنة في حقل من نوع Image .. <<-->> إجرائيات مخزنة ببارامترات ديناميكية مفيدة جداً للاستعلامات استخدام رقم الحقل بدلاً من الإسم في عبارات الإستعلام <<-->> من هو أضخم الجداول في قاعدة بياناتي ؟معرفة زمن تنفيذ الإجرائيات ( لتختار الطريقة الأسرع بين إجرائياتك المخزنة ) <<-->> التعامل مع الـ Rules برمجياً الحصول على آخر صف في الجدول <<-->> قراءة ملفات XML باستخدام T-SQL برمجياً (مثال مرفق)سحب بيانات ملف إكسل إلى الـ SQL Server <<-->> تشفير النسخة الاحتياطية بكلمة مرور <<-->> التخلص من البيانات المكررة <<-->> حل مشكلة التاريخ الهجريDifferential Backup بالتعريف---------- لا إله إلا الله .. محمد رسول الله

أخوكم في الله..  Imad Ozone

#4

السلام عليكم

تحديث :

العمل مع WebService من خلال Ajax بطريقة أخرى .

وتاتى من خلال Sys.Net.WebServiceProxy.

وإليكم مثال :

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
    <script type="text/javascript">
        function somefunc() {
            Sys.Net.WebServiceProxy.invoke("webservice.asmx", "HelloWorld", false, null, function (res) {
                alert(res);
            },
     function (err) {
         alert(err.get_message());
     });
        }
    </script>
</head>
<body>
    <form id="form1" runat="server">
    <asp:ScriptManager ID="ScriptManager1" runat="server">
    </asp:ScriptManager>
    <div>
        <input type="button" name="some" value="Call WebService " onclick="somefunc();" />
    </div>
    </form>
</body>
</html>

ما يحدث فى المثال أنه يتم إستدعاء دالة HelloWorld ومن ثم إخرجها فى رسالة alert .

ليس هناك جديد ولكن زيادة فى العلم بالأمر .

أرجوا أن تنتفعوا ونسأل الله المزيد .

Ahmed Moosa

Microsoft Community Contributor | MCC

Microsoft Certified Professional Developer | MCPD

Microsoft Certified Technology Specialist | MCTS

Senior .NET Developer

.Net Trainer

English blog : http://weblogs.asp.net/ahmedmoosa/

مدونة عربى : http://ahmedmoosa.wordpress.com/

مواضيع مشابهة