[Web Services] إرسال البيانات إلى السيرفر عبر WebClient

من الأشياء المهمة في برمجة التطبيقات هي الويب سيرفس (Web Service)، نستطيع من خلالها الإتصال بالسيرفرات البعيدة -Hosting Servers- وإرسال HTTP Methods، بإختصار مهمة جدا في إرسال وإستقبال البيانات من الإستضافة الخاصة بك (مثل: عمليات تسجيل بيانات الأعضاء، والـتأكد من تسجيل الدخول، إرسال وحفظ التعليقات ..إلخ ).

لماذا كلاس WebClient ؟

هناك طرق كثيرة جداً منها HTTPClient وRESTful وWbClient ووو. سوف نتناولها جميعها إن شاء الله، كلها تقوم بنفس القرض ولكن بطرق وكفاءة مختلفة، سوف نبدأ إن شاء الله ب WebClient لأنه سهل الفهم وغير معقد وأداءه ممتاز.

ما هي المتطلبات اللازمة داخل التطبيق ؟

  • مكتبة System.Net
  • مكتبة System.Collections.Specialized
  • رابط URI الخاص بالسيرفر المستضيف.
using System.Collections.Specialized;
using System.Net;

لنفترض اننا نريد إرسال بيانات تسجيل عضو جديد إلى قاعدة البيانات بالسيرفر(name, email, password). ولدينا قاعدة بيانات بإسم xamarin وبها جدول users ليحوي بيانات المستخدمين. والرابط هو
http://example.com/SignUp.php .

يكون الإرسال كالتالي :

protected override void OnCreate(Bundle savedInstanceState) {

    string sign_up_uri = "http://example.com/SignUp.php";
    string name = "Ahmed";
    string email = "ahmed@arabxamarin.com";
    string password = "ahmed123";

    WebClient client = new WebClient(); 
    Uri uri = new Uri(sign_up_uri);
    NameValueCollection parameter = new NameValueCollection();

    parameter.Add("name", name);
    parameter.Add("email", email);
    parameter.Add("password", password);

    client.UploadValuesAsync(uri, parameter);
    client.UploadValuesCompleted += Client_UploadValuesCompleted;
}

private void Client_UploadValuesCompleted_Chats(object sender, UploadValuesCompletedEventArgs e)
{
  RunOnUiThread(()=>{
    // مثلا رسالة الخطاء إن وجد
    string ErrorMessage = e.Error.Message;
    // النتيجة الصادرة من السيرفر
    string result = Encoding.UTF8.GetString(e.Result);
  });
}

عند إستدعاء client.UploadValuesAsync يتم إرسال البيانات للرابط المحدد، بشأن السيرفر التعامل هذه البيانات وحفظها في قاعدة البيانات، ييفترض أن تكون أعدته، ولكن نهاية هذا المقال سوف أعطيكم مثال على كيفية التعامل مع هذه البيانات في إتجاه السيرفر سأعطي مثال بلغة php .
قبل ذلك لنفهم لماذا إشتركنا بهذه الدالة Client_UploadValuesCompleted_Chats !

بعد ان يتم الإرسال سيتم تنفيز هذه الدالة حامله معها إستجابة السيرفر(رسالة الخطأ إن وجد) + إستجابة السيرفر (الإستجابة مفيدة جدا أحيانا تود ان ترسل من السيرفر دلالات على حسب سريان العملية داخل السيرفر مثلا إذا أردت انت تخبر المرسل بأن هذا البريد غير صالح ترسل له رقم 0 مثلا او ان التسجيل تم بنجاح ترسل له 1) .

هذا مثال للغة السيرفر وكيفية التعامل مع الطلب القادم من التطبيق (بإستخدام الphp) :
إستبدل جميع الحقول التي باللون الأخضر بالاسماء التي تخصك.

<?php
$dsn = "mysql:host=your_host_name;dbname=your_database_name";
$dbUser = "DataBase_UserName";
$dbPass = "DataBase_Password";

$option = array( PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8' );

try {
    $con = new PDO($dsn, $dbUser, $dbPass, $option);
    $con->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
    echo "Connection failed with : ".$e->getMessage();
}

$name = $_POST['name'];
$email = $_POST['email'];
$password = $_POST['password'];

$statment = $con-prepare("INSERT INTO tableName (name, email, password) VALUES (?, ?, ?)");
$statment->execute(array($name, $email, $password));

$rows = $statment->rowCount();
// هنا يكمن رد السيرفر الذي تحدثنا عنها قبل قليل الرد ب 0 او 1
if($rows == 1){ 
   echo 1;
}else{
   echo 0;
}
?>

 

الموضوع متوسع جداً ولكن حاولت أن أستخلص بعد الأدوات التي قد تساعدك في مشاريعك الأولى، بما أن الكثير ترك برمجة الأندرويد بسبب الويب سيرفس وتعقيدها فحاولت أن أبسط هذا الكلاس بقدر ما يمكن. ولو واجهتك أي مشاكل راسلنا على نموزج الإتصال أو أبدأ مناقشة مشكلتك عبر التعليقات ليستفيد الكل من الإجابة.

 

1 تعليق

  1. abdullah 23 أبريل، 2019 / 4:44 م

    ممكن شرح كيف مزامنة البيانات عبر xamarin من sqlitr الى sqlserver h, orcl

    View Comment

اترك تعليقاً

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها بـ *