سفارش تبلیغ
صبا ویژن

ایجاد Data Layer
تصویر 20 - CRUD با استفاده از View Model
یک کلاس از نوع Linq to SQL به سایت RIATasks.Web تحت عنوان RIATasksDB.dbml اضافه کنید.
نکته: شما می توانید از Entity Framework به جای Linq to SQL ( یا هر نوع تکنولوژی دیگری که به Data دسترسی دارد) استفاده کنید. دلیل انتخاب Linq to SQL در این پروژه سهولت ایجاد تنظیمات آن می باشد.

تصویر 21 - CRUD با استفاده از View Model
روی لینک Server Explorer کلیک کنید.
تصویر 22 - CRUD با استفاده از View Model
یک connection به دیتابیس RIATasks ایجاد کنید و جدول Tasks را با موس کشیده و در محیط Object Relational Designer رها کنید.
تصویر 23 - CRUD با استفاده از View Model
Data layer تکمیل شد. فایل را ذخیره کرده و آنرا ببندید.


ایجاد Web Service
تصویر 24 - CRUD با استفاده از View Model
یک فایل از نوع Web service به پروژه RIATasks تحت عنوان Webservice.asmx اضافه کنید.
فایل Webservice.asmx.cs را باز کنید و تمامی کدهای زیر را با کدهای موجود در آن جایگزین کنید:

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

namespace RIATasks.Web
{
[WebService(Namespace = "http://OpenLightGroup.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.ComponentModel.ToolboxItem(false)]
public class WebService : System.Web.Services.WebService
{
#region GetCurrentUserID
private int GetCurrentUserID()
{
int intUserID = -1;
if (HttpContext.Current.User.Identity.IsAuthenticated)
{
// Get the current user
intUserID =
Convert.ToInt32(HttpContext.Current.User.Identity.Name);
}
return intUserID;
}
#endregion

// Web Methods

#region GetTasks
[WebMethod]
public List<Task> GetTasks()
{
// Create a collection to hold the results
List<Task> colResult = new List<Task>();

RIATasksDBDataContext DB = new RIATasksDBDataContext();

var colTasks = from Tasks in DB.Tasks
where Tasks.UserID == GetCurrentUserID()
select Tasks;

// Loop thru the Tasks
foreach (var item in colTasks)
{
// Create a Task
Task tmpTask = new Task();

// Set only the TaskID and the Name
// We do this because Description could be
// a large amount of data that will slow down
// the application and we don"t need it now
tmpTask.TaskID = item.TaskID;
tmpTask.TaskName = item.TaskName;

// Add to the final results
colResult.Add(tmpTask);
}

return colResult;
}
#endregion

#region GetTask
[WebMethod]
public Task GetTask(int TaskID)
{
RIATasksDBDataContext DB = new RIATasksDBDataContext();

var result = (from Tasks in DB.Tasks
where Tasks.TaskID == TaskID
where Tasks.UserID == GetCurrentUserID()
select Tasks).FirstOrDefault();

return result;
}
#endregion

#region DeleteTask
[WebMethod]
public string DeleteTask(int TaskID)
{
string strError = "";
RIATasksDBDataContext DB = new RIATasksDBDataContext();

try
{
var result = (from Tasks in DB.Tasks
where Tasks.TaskID == TaskID
where Tasks.UserID == GetCurrentUserID()
select Tasks).FirstOrDefault();

if (result != null)
{
DB.Tasks.DeleteOnSubmit(result);
DB.SubmitChanges();
}
}
catch (Exception ex)
{
strError = ex.Message;
}

return strError;
}
#endregion

#region UpdateTask
[WebMethod]
public string UpdateTask(Task objTask)
{
string strError = "";
RIATasksDBDataContext DB = new RIATasksDBDataContext();

try
{
var result = (from Tasks in DB.Tasks
where Tasks.TaskID == objTask.TaskID
where Tasks.UserID == GetCurrentUserID()
select Tasks).FirstOrDefault();

if (result != null)
{
result.TaskDescription = objTask.TaskDescription;
result.TaskName = objTask.TaskName;

DB.SubmitChanges();
}
}
catch (Exception ex)
{
strError = ex.Message;
}

return strError;
}
#endregion

#region InsertTask
[WebMethod]
public Task InsertTask(Task objTask)
{
RIATasksDBDataContext DB = new RIATasksDBDataContext();

try
{
Task InsertTask = new Task();

InsertTask.TaskDescription = objTask.TaskDescription;
InsertTask.TaskName = objTask.TaskName;
InsertTask.UserID = GetCurrentUserID();

DB.Tasks.InsertOnSubmit(InsertTask);
DB.SubmitChanges();

// Set the TaskID
objTask.TaskID = InsertTask.TaskID;
}
catch (Exception ex)
{
// Log the error
objTask.TaskID = -1;
objTask.TaskDescription = ex.Message;
}

return objTask;
}
#endregion
}
}

توجه کنید که web service متد GetCurrentUserID() را که از Convert.ToInt32(HttpContext.Current.User.Identity.Name) استفاده می کند، برای به دست آوردن کاربر جاری فراخوانی می کند.
UserID کاربر جاری وقتی که به برنامه log in می کند مشخص می شود و یک authentication ‘token’ ایجاد می شود. Web browser کاربر ها این token را به ازای تمامی تقاضاها پاس می کنند. از جمله تقاضاهای وب سرویس که به واسطه برنامه Silverlight ایجاد می شوند.
تصویر 25 - CRUD با استفاده از View Model
برای بررسی صحت تنظیمات می توانید روی Webservice.asmx کلیک راست کرده و آن را با انتخاب گزینه View in Browser در مروگر خود ببینید.
تصویر 26 - CRUD با استفاده از View Model
وب متدها به شما نمایش داده خواهد شد.
نکته: شما می توانید به جای asmx از WCF استفاده کنید. علت این انتخاب راحتی توسعه asmx می باشد.

در قسمت چهارم به سراغ پروژه Silverlight خواهیم رفت.


اولین دیدگاه را شما بگذارید Silverlight ، MVVM ، Expression Blend ،

 حذف ردیف...   

مشخصات مدیر وبلاگ

محمد محمدی پیروز [33]

دل نوشته ها و تجربه های یک برنامه نویس
ویرایش

لوگوی دوستان



ویرایش

طراحی پوسته توسط تیم پارسی بلاگ