استفاده از وب سرویس ASP.NET در AngularJS
دوشنبه 1 شهریور 1395در این مقاله ، ما نحوه ی ایجاد وب سرویس ASP.NET و نحوه ی استفاده از این وب سرویس در AngularJS را یاد خواهیم گرفت.
در یک جدول ، به نام employees داده ها را داریم.ما می خواهیم داده ها را با کمک وب سرویس ASP.NET نمایش دهیم و در View ی خود نمایش دهیم.بنابراین مثال زیر را ببینید.
معرفی:
در SQL ، ما یک جدول داریم ، به نام employee که جزئیات این جدول شامل Name ، address ، Salary و مانند آن می باشد.

حال ، ما میخواهیم یک وب سرویس به Solution خود اضافه کنیم .روی Solution راست کلیک کنید ->Add new Item-> نام سرویس را Employee بگذارید.

نام این سرویس را Employee.asmx می گذاریم.

حال ، تعدادی name space برای این سرویس اضافه کنید:
1. using System.Configuration; 2. using System.Data.SqlClient; 3. using System.Web.Script.Serialization;
ما از این فضانام using System.Web.Script.Serialization برای تبدیل داده ها به فرمت JSON استفاده می کنیم، حال این کد را برای استفاده از این وب سرویس uncomment می کنیم .
[System.Web.Script.Services.ScriptService]
حال ، ما تابع Get AllEmployees() را تغییر دادیم و آن لیستی از تمام کارکنان را خواهد داد .بنابراین ، ما یک فایل Employee.cs را اضافه می کنیم .در این فایل، ما propertyها را انتساب می دهیم.
دوباره روی solution راست کلیک کنید -> Add new Item->Class File -> نام کلاس را Employee.cs بگذارید.

نام کلاس را Employee.cs می گذاریم.

حال ، فقط این کدها را در فایل cs می گذاریم.

حال ، این کد را به فایل cs اضافه کنید.

حال ، می خواهیم به سرویس خودمان برگردیم . در اینجا ، ما لیستی از کارکنان را می خواهیم ، بنابراین کد زیر را اضافه می کنیم:
1. public class Employee: System.Web.Services.WebService {
2. [WebMethod]
3. public void GetAllEmployees() {
4. List < Employee > listEmployees = new List < Employee > ();
5. }
6. }
حال ، ما می خواهیم Connection String را ازفایل Web.config بخوانیم بنابراین ، ما از کد زیر اسفاده می کنیم.
1. string cs = ConfigurationManager.ConnectionStrings["Test"].ConnectionString; 2. using (SqlConnection con = new SqlConnection(cs))
نام Connection string Test می باشد.حال ، ما جدول را از طریق SQL command ، پاس می دهیم و از command را خروجی می گیریم.
1. SqlCommand cmd = new SqlCommand("Select * from EmptEst", con);
2. con.Open();
3. SqlDataReader sdr = cmd.ExecuteReader();
حال ، روی رکوردهایی که می خواهیم نمایش داده شوند یک حلقه ی while میزنیم :
1. while (sdr.Read())
2. {
3. Employee employee = new Employee();
4. employee.EmpName = sdr["EmpName"].ToString();
5. employee.EmpAddress = sdr["EmpAddress"].ToString();
6. employee.EmpSalary = Convert.ToInt32(sdr["EmpSalary"]);
7. }
ما یک شی از لیست employees اضافه می کنیم.
listEmployees.Add(employee);
ما از این property برای نمایش رکوردها در فرمت JSON ، استفاده می کنیم.
JavaScriptSerializer js = new JavaScriptSerializer();
ما این رکوردها را درcontext.write پاس می دهیم و لیستی ازemployeeها را serialize می کنیم.
Context.Response.Write(js.Serialize(listEmployees));
کد نهایی سرویس ما به شکل زیر است:
1. [WebMethod]
2. public void GetAllEmployees() {
3. List < Employee > listEmployees = new List < Employee > ();
4. string cs = ConfigurationManager.ConnectionStrings["Test"].ConnectionString;
5. using(SqlConnection con = new SqlConnection(cs)) {
6. SqlCommand cmd = new SqlCommand("Select * from EmptEst", con);
7. con.Open();
8. SqlDataReader sdr = cmd.ExecuteReader();
9. while (sdr.Read()) {
10. Employee employee = new Employee();
11. employee.EmpName = sdr["EmpName"].ToString();
12. employee.EmpAddress = sdr["EmpAddress"].ToString();
13. employee.EmpSalary = Convert.ToInt32(sdr["EmpSalary"]);
14. listEmployees.Add(employee);
15. }
16. }
17. JavaScriptSerializer js = new JavaScriptSerializer();
18. Context.Response.Write(js.Serialize(listEmployees));
19. }
حال ، ما سرویس را اجرا می گیریم و خروجی زیر را خواهیم دید:

حال سرویس را Invoke می کنیم:

ما خروجی JSON را خواهیم گرفت.

حال ، ما صفحه ی HTML را اضافه می کنیم و این رکوردها را نمایش می دهد.بنابراین ، برای اضافه کردن HTML Page روی Solution راست کلیک کنید -> Html Page -> و نام Display.html را مانند زیر بگذارید:

در صفحه ی HTML ، ما اسم ماژول را در ng-app در تگ body و نام Controller را در ng-controller قرار می دهیم.

حال ، در اینجا ما یک تگ table اضافه می کنیم که در داخل آن header و tr و دایرکتیو ng-repat (برای ایجاد یک حلقه بر روی رکوردها )وجود دارد.
از این رو ، صفحه ی HTML نهایی ما به شکل زیر است:
1. <table>
2. <thead>
3. <tr>
4. <th>Name</th>
5. <th>Address</th>
6. <th>Salary</th>
7. </tr>
8. </thead>
9. <tbody>
10. <tr ng-repeat="employee in employees">
11. <td> {{employee.EmpName}} </td>
12. <td>{{employee.EmpAddress}}</td>
13. <td>{{employee.EmpSalary}}</td>
14. </tr>
15. </tbody>
16. </table>
حال ، می خواهیم به Controller برگردیم .در ابتدا ، model ما در زیر آمده است:

حال ،فقط این کد را در model خود بنویسید.
در تابع ، ما $http را برای گرفتن پاسخ از سرویس خود پاس می دهیم و در $http.get ، ما نام سرویس و نام تابع را در قالب ‘servicename/functionname’می نویسیم که بعدا به صورت غیر همزمان فراخوانی خواهد شد.بنابراین ، تابع anonymous دیگری را اضافه کنید به عنوان مثال یک پاسخ employee را به شی $scope اضافه می کند.
1. var mypartone = angular.module("mymodule", []).controller("myController", function($scope, $http) {
2. $http.get('EmployeeCheck.asmx/GetAllEmployees').then(function(response) {
3. $scope.employees = response.data;
4. });
5. });
حال ، تغییرات را ذخیره کنید و برنامه را اجرا بگیرید.

همانطوری که شما میبینید، ما هیچ داده ای را نمی گیریم. حال می خواهیم ابزار توسعه را ببینیم:

خطای 500 را داده است(خطای داخلی سرور):
چرا این خطا آمده است؟ ما در model خود از get استفاده کرده ایم.

فقط آن را به Post تغییر دهید.

بنابراین، کد نهایی model به صورت زیر است:
var mypartone = angular.module("mymodule", []).controller("myController", function($scope, $http) {
• $http.post('EmployeeCheck.asmx/GetAllEmployees').then(function(response) {
• $scope.employees = response.data;
• });
• });
حال، صفحه را reload می کنیم:

برای گرفتن خروجی یکسان با get ابتدا در model تغییر زیر را وارد کنید:
$http.get('EmployeeCheck.asmx/GetAllEmployees')
حال ، به فایل Web.config بروید . در زیر قسمت <system.web> ، فقط یک قسمت ایجاد کنید:
1. <system.web> 2. <compilation debug="true" targetFramework="4.0" /> 3. <webServices> 4. <protocols> 5. <add name="HttpGet" /> </protocols> 6. </webServices> 7. </system.web>
حال ، صفحه را reload کنید:

خروجی را با استفاده از درخواست get ، بدون هیچ خطایی گرفتیم. ما خروجی را می گیریم و داده را از دیتابیس از طریق وب سرویس خودمان در Angular JS نشان می دهیم.
آموزش angular
- AngularJs
- 2k بازدید
- 4 تشکر