Tải bản đầy đủ (.pdf) (37 trang)

Bài giảng lập trình mạng chương 15 ths trần bá nhiệm

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (831.9 KB, 37 trang )

01/08/2011

CHƯƠNG 15
WEB SERVICES &

REMOTING

ThS. Trần Bá Nhiệm
Website:

sites.google.com/site/tranbanhiem
Email:

Nội dung

• Giới thiệu
• Tạo một Web service
• Gọi khơng đồng bộ đến Web services
• Cộng tác
• Hiệu suất
• An ninh
• Dịch vụ nâng cao
• .NET remoting

01/08/2011 Chương 15: Web Services & Remoting 2

1

01/08/2011

Giới thiệu



• Web Service là một trong những phần hỗ
trợ rất mạnh của .NET

• .NET hỗ trợ rất đầy đủ, những vấn đề
phức tạp phía sau đã được che dấu, cơng
việc của người lập trình trở nên đơn giản
hơn nhiều

• Đặc điểm thú vị khác nữa của .NET là
truyền thông với các ứng dụng phân tán

01/08/2011 Chương 15: Web Services & Remoting 3

Tạo một Web Service

• Cần cài đặt IIS server
• Theo dõi các biến server, trong đó có

REMOTE_HOST (chỉ địa chỉ IP của client
từ xa) sẽ dùng sau này
• Khởi tạo project mới, kiểu ASP.NET Web
Service. Đường dẫn mặc định là IIS server
(http://localhost)
• Thêm code sau vào file asmx:

01/08/2011 Chương 15: Web Services & Remoting 4

2


01/08/2011

Tạo một Web Service

[WebMethod]
public String[] getServerVariableNames()
{

System.Collections.Specialized.NameValueColl
ection col;

col=Context.Request.ServerVariables;
String[] arr = col.AllKeys;
return arr;
}

01/08/2011 Chương 15: Web Services & Remoting 5

Tạo một Web Service

• Chú ý thuộc tính [WebMethod] phải đặt
trước các tên hàm

• Mảng trả về từ hàm này sẽ được ghi
nhận, nó sẽ chứa các chuỗi như
REMOTE_HOST, HTTP_USER_AGENT

• Để lấy được giá trị của các biến chúng ta
phải hiện thực thêm một hàm sau:


01/08/2011 Chương 15: Web Services & Remoting 6

3

01/08/2011

Tạo một Web Service

[WebMethod]
public string[] getServerVariable(string
variableName)
{
System.Collections.Specialized.NameValueColl
ection col;

col=Context.Request.ServerVariables;
String[] arr = col.GetValues(variableName);
return arr;
}

01/08/2011 Chương 15: Web Services & Remoting 7

Tạo một Web Service

• Hàm trên trả về giá trị của một biến server
HTTP_ACCEPT liệt kê các kiểu MIME là
trình duyệt có thể hiển thị

• Thực hiện chương trình trên, trình duyệt
sẽ mở ra với nội dung XML được định

dạng với SOAP

• Chú ý biến server như REMOTE_ADDR

01/08/2011 Chương 15: Web Services & Remoting 8

4

01/08/2011

Dùng Web Service

• Tạo project mới kiểu Windows Form, chọn
Project→Add Web Reference và nhập vào
URL của file ASMX được tạo trong ví dụ
trước

• Tạo list view trên form, tên
lvServerVariables, 1 button tên
btnPopulate

• Code xử lý một số sự kiện:

01/08/2011 Chương 15: Web Services & Remoting 9

Dùng Web Service

private void Form1_Load(object sender,
System.EventArgs e)
{


lvServerVariables.View=View.Details;
lvServerVariables.Columns.Add("Name",
lvServerVariables.Width/2,
HorizontalAlignment.Left);
lvServerVariables.Columns.Add("Value",
lvServerVariables.Width/2,
HorizontalAlignment.Left);
}

01/08/2011 Chương 15: Web Services & Remoting 10

5

01/08/2011

Dùng Web Service

private void btnPopulate_Click(object sender,
System.EventArgs e)
{

string[] serverVariableNames;
localhost.Service1 webservice = new
localhost.Service1();
serverVariableNames =
webservice.getServerVariableNames();
lvServerVariables.Items.Clear();
foreach (string serverVariableName in
serverVariableNames)

{

01/08/2011 Chương 15: Web Services & Remoting 11

Dùng Web Service

ListViewItem lvItem = new ListViewItem();
lvItem.Text = serverVariableName;
string[] serverVariableValues;
serverVariableValues =
webservice.getServerVariable(serverVariableName);
if (serverVariableValues!=null)

lvItem.SubItems.Add(serverVariableValues[0]);
lvServerVariables.Items.Add((ListViewItem)lvItem.Cl
one());
}
}

01/08/2011 Chương 15: Web Services & Remoting 12

6

01/08/2011

Dùng Web Service

01/08/2011 Chương 15: Web Services & Remoting 13

Tạo Web Service Proxy


• Trước tiên cần tạo một Web Service Server
(lưu trữ với tên MathService.asmx trong thư
mục C:\inetpub\wwwroot\test) như sau:

<%@ WebService Language="c#"
Class="MathService"%>
using System;
using System.Web.Services;
[WebService(Namespace="http://localhost/test")]
public class MathService : WebService
{

[WebMethod]

01/08/2011 Chương 15: Web Services & Remoting 14

7

01/08/2011

Tạo Web Service Proxy

public int Add(int a, int b)
{
int answer;
answer = a + b;
return answer;
}
[WebMethod]

public int Subtract(int a, int b)
{
int answer;
answer = a - b;
return answer;
}

01/08/2011 Chương 15: Web Services & Remoting 15

Tạo Web Service Proxy

[WebMethod]
public int Multiply(int a, int b)
{
int answer;
answer = a * b;
return answer;
}
[WebMethod]
public int Divide(int a, int b)
{

01/08/2011 Chương 15: Web Services & Remoting 16

8

01/08/2011

Tạo Web Service Proxy


int answer;
if (b != 0)
{

answer = a / b;
return answer;
} else
return 0;
}
}

01/08/2011 Chương 15: Web Services & Remoting 17

Tạo Web Service Proxy

• Đến đây thì chúng ta có thể thử nghiệm
xem Web Service trên hoạt động như thế
nào

• Sử dụng trình duyệt, nhập URI:
http://localhost/test/MathService.asmx

• Kết quả như hình minh họa

01/08/2011 Chương 15: Web Services & Remoting 18

9

01/08/2011


Tạo Web Service Proxy

01/08/2011 Chương 15: Web Services & Remoting 19

Tạo Web Service Proxy

• Tạo một Web Service Proxy từ ứng dụng
WSDL (có thể tìm thấy tại C:\Program
Files (x86)\Microsoft
SDKs\Windows\v7.0A\Bin)

• Thực hiện cơng việc trên qua dịng lệnh:

wsdl http://localhost/test/MathService.asmx

• Sau khi thực hiện sẽ thu được file
MathService.cs

01/08/2011 Chương 15: Web Services & Remoting 20

10

01/08/2011

Tạo Web Service Proxy

• Thực hiện tạo file DLL từ dịng lệnh:

csc /t:library MathService.cs


• Chú ý: ứng dụng csc có thể tìm thấy tại
thư mục cài đặt .NET\Framework, ví dụ:
C:\Windows\Microsoft.NET\Framework\v3.
5

• Kết quả thu được là file MathService.dll

01/08/2011 Chương 15: Web Services & Remoting 21

Tạo Web Service Proxy

• Tạo một Web Service Client:
using System;
class ServiceTest
{

public static void Main (string[] argv)
{
MathService ms = new MathService();
int x = Convert.ToInt16(argv[0]);
int y = Convert.ToInt16(argv[1]);
int sum = ms.Add(x, y);

01/08/2011 Chương 15: Web Services & Remoting 22

11

01/08/2011

Tạo Web Service Proxy


int sub = ms.Subtract(x, y);
int mult = ms.Multiply(x, y);
int div = ms.Divide(x, y);
Console.WriteLine("The answers are:");
Console.WriteLine(" {0} + {1} = {2}", x, y, sum);
Console.WriteLine(" {0} - {1} = {2}", x, y, sub);
Console.WriteLine(" {0} * {1} = {2}", x, y, mult);
Console.WriteLine(" {0} / {1} = {2}", x, y, div);
}
}

01/08/2011 Chương 15: Web Services & Remoting 23

Tạo Web Service Proxy

• Thực hiện biên dịch chương trình client
trên bằng dịng lệnh:

csc /r:MathService.dll ServiceTest.cs

• Kết quả thu được là file ServiceTest.exe
• Thực thi ứng dụng client với cú pháp:

ServiceTest <số thứ 1> <số thứ 2>

• Minh họa kết quả thực thi như hình sau:

01/08/2011 Chương 15: Web Services & Remoting 24


12

01/08/2011

Tạo Web Service Proxy

01/08/2011 Chương 15: Web Services & Remoting 25

Minh hoạ Web Service Proxy

• Khởi tạo project mới, kiểu ASP.NET Web
Service.

• Đặt tên namespace MyServices
• Thêm code tương tự như class

MathService (trong file MathService.asmx)
ở ví dụ trước, chứa 4 phương thức Add,
Subtract, Multiply, Divide
• Thực hiện project trên để khởi động server

01/08/2011 Chương 15: Web Services & Remoting 26

13

01/08/2011

Minh hoạ Web Service Proxy

• Xây dựng ứng dụng client


• Tạo project mới, kiểu Windows Form, gồm 1
form, 6 textbox có tên lần lượt là tbNumA,
tbNumB, tbAdd, tbSubtract, tbMultiply,
tbDivide; 1 button với tên btnCalculate

• Chọn project Add Service References
Advanced và tiến hành chọn Add Web
References đến MyServices (chứa
MathService), chọn tên Web Service là
localhost

01/08/2011 Chương 15: Web Services & Remoting 27

Minh hoạ Web Service Proxy

• Chỉnh sửa Web Reference URL của
localhost cho đúng với địa chỉ server đang
chạy, giả sử là http://localhost:6415

• Thêm đoạn code xử lý sự kiện Click của
button trên như sau:

01/08/2011 Chương 15: Web Services & Remoting 28

14

01/08/2011

Minh hoạ Web Service Proxy


private void btnCalculate_Click(object sender, EventArgs e)
{

localhost.MathService obj = new localhost.MathService();
if (obj == null)

System.Console.WriteLine("Could not locate localhost");
else
{

int a = Convert.ToInt32(tbNumA.Text);
int b = Convert.ToInt32(tbNumB.Text);
int c = obj.Add(a, b);

01/08/2011 Chương 15: Web Services & Remoting 29

Minh hoạ Web Service Proxy

c = obj.Subtract(a, b);
tbSubtract.Text = c.ToString();
c = obj.Multiply(a, b);
tbMultiply.Text = c.ToString();
c = obj.Divide(a, b);
tbDivide.Text = c.ToString();
}
}

01/08/2011 Chương 15: Web Services & Remoting 30


15

01/08/2011

Minh hoạ Web Service Proxy

01/08/2011 Chương 15: Web Services & Remoting 31

Gọi không đồng bộ đến Web
Service

• Tình huống thực tế là Web Service có thể
được triển khai trên một số web server
phân tán, đồng thời các client có thể cũng
kết nối vào một số Web Service tại cùng
thời điểm để cải thiện hiệu suất

• Có một số kỹ thuật để quản lý nhiều cuộc
gọi đến Web service đồng thời:

– Wait handles

– Callbacks

01/08/2011 Chương 15: Web Services & Remoting 32

16

01/08/2011


.NET remoting

• .NET remoting tương đương với Java
Remote Method Invocation (RMI) và
Distributed Common Object Model (DCOM)
của Visual Basic

• Cho phép chia sẻ các class và phương thức
giữa các máy tính trên mạng

• Giúp cho thuận tiện dùng các đối tượng
complex trên các máy tính ở xa

• Thuận lợi nữa là remoting trừu tượng hóa cơ
sở hạ tầng mạng

01/08/2011 Chương 15: Web Services & Remoting 33

.NET remoting

• Kiến trúc .NET remoting được mơ tả như
trong hình

• Khơng giống như Web service, remoting
không cần cài thêm phần mềm server nào
thêm để xử lý yêu cầu đến

01/08/2011 Chương 15: Web Services & Remoting 34

17


01/08/2011

.NET remoting

• .NET remoting cho phép đơn giản hóa q
trình hiện thực các ứng dụng client/server
trong đó server thực hiện một số tác vụ
dưới sự chỉ dẫn của client

• Khi dùng remoting chúng ta cần tạo client
và server. Đồng thời phải tạo một đối
tượng thực hiện các chức năng theo yêu
cầu

01/08/2011 Chương 15: Web Services & Remoting 35

.NET remoting

• Một application domain là vùng mà tất cả
các ứng dụng chia sẻ cùng một khơng
gian bộ nhớ

• Bất kỳ class nào nằm ngoài application
domain của một client đều được xem là
một remote class

• Minh họa application domain của một
client trong hình sau


01/08/2011 Chương 15: Web Services & Remoting 36

18

01/08/2011

.NET remoting

01/08/2011 Chương 15: Web Services & Remoting 37

.NET remoting

• Khi các class nằm ngồi application
domain thì chúng khơng thể truy xuất trực
tiếp vào domain khác bằng tham chiếu (vì
khơng có vùng nhớ chia sẻ). Thay vì vậy,
mỗi thực thể của class phải được
serialized và chuyển qua kênh truyền đến
ứng dụng client khác

01/08/2011 Chương 15: Web Services & Remoting 38

19

01/08/2011

.NET remoting

• Các bên của kết nối đều phải biết kiểu của
đối tượng, client cần biết IP và port của

server.

• Mặc dù khơng nhìn thấy cái gì truyền trên
mạng, nhưng chúng ta cần lựa chọn giữa
SOAP trên HTTP (linh hoạt) hoặc binary
trên TCP (hiệu suất)

01/08/2011 Chương 15: Web Services & Remoting 39

.NET remoting

• SOAP cho remoting ít linh hoạt hơn Web
service tương đương

• Để ngăn client làm kiệt quệ tài nguyên của
server bởi việc tạo ra hàng triệu đối tượng và
bỏ khơng dùng, remoting có một bộ thu gom
rác tích hợp sẵn

• Các đối tượng có thể tạo nhưng vịng đời chỉ
dài bằng thời gian thực thi của hàm
(singlecall) hoặc class (singleton) hoặc vòng
đời do server xác định (published objects)

01/08/2011 Chương 15: Web Services & Remoting 40

20



×