Chương 12 : Dch v Web XML và Remoting
Microsoft .NET Framework h tr hai mô hình lp trình phân tán cp cao là Remoting
dch v Web XML. Mc dù c hai công ngh này có nhiu đim tương đồng (ví d, c hai
cùng tru tượng hóa li gi gia các tiến trình hay gia các máy tính khác nhau thành li
gi phương thc ca các đối tượng xa), nhưng chúng cũng có vài đim khác nhau cơ
bn.
Dch v Web XML được xây dng bng các chun xuyên-nn và da vào khái nim XML
messaging. Dch v Web XML được thc thi bi b thc thi ASP.NET; nghĩa là chúng có
được các tính năng ca ASP.NET như output-caching. Điu này cũng có nghĩa là dch v
Web XML thuc dng phi trng thái (stateless). Nói chung, dch v Web XML thích hp
nht khi bn cn xuyên biên nn (ví d, mt Java-client gi mt dch v Web ASP.NET)
hay biên tin cy (ví d, trong các phiên giao dch thương mi). Trong chương này, chúng
ta s bàn mt s mc liên quan đến dch v Web XML sau:
Nâng cao tính linh hot ca các lp proxy bng cách không viết mã cng cho địa ch
ca dch v Web XML (mc 12.1).
S dng k thut caching để nâng cao hiu năng và kh năng phc v (tính quy mô)
ca dch v Web XML (mc 12.2 và 12.3).
To phương thc giao dch cho dch v Web XML (mc 12.4).
Truyn thông tin xác thc cho mt dch v Web XML bng proxy (mc 12.5).
Gi bt đồng b mt phương thc ca dch v Web XML (mc 12.6).
Remoting là mt công ngh đặc trưng ca .NET dành cho các đối tượng phân tán và được
xem như là mt hu du ca công ngh DCOM. Công ngh này lý tưởng cho các h
thng in-house1[1][4]; trong đó, tt c các ng dng đều được xây dng trên nn .NET,
chng hn backbone ca mt h thng x lý hóa đơn. Remoting cho phép các chun giao
tiếp khác nhau, chng hn các thông đip nh phân nh gn và các kết ni TCP/IP hiu
qu hơn mà dch v Web XML không h tr. Ngoài ra, Remoting còn là công ngh duy
nht h tr các đối tượng có trng thái, và giao tiếp hai chiu thông qua callback. Nó
cũng là công ngh duy nht cho phép gi các đối tượng .NET tùy biến qua mng. Trong
chương này, chúng ta s bàn mt s mc liên quan đến Remoting sau:
To các đối tượng kh-truy-xut-t-xa; đăng ký và qun lý chúng trên IIS (mc
12.7, 12.8, và 12.9).
Phát sinh s kin trên các kênh truy xut t xa (mc 12.10).

Kim soát thi gian sng và phiên bn ca các đối tượng kh-truy-xut-t-xa (mc
12.11 và 12.12).
Hin thc các phương thc mt chiu trong các đối tượng kh-truy-xut-t-xa (mc
12.13).
# Chương này ch đưa ra mt s k thut hu dng trong vic s dng dch v
Web XMLRemoting. Để hiu sâu hơn, bn cn tham kho các sách chuyên
v đề tài này.
1.1 Tránh viết mã cng cho địa ch URL ca dch v Web XML
V
V
Bn cn s dng mt dch v Web XML được đặt ti mt địa ch URLđịa
ch này có th thay đổi sau khi bn trin khai ng dng client.
#
#
S dng địa ch URL động cho dch v Web XML. Khi đó, địa ch động này
được ly mt cách t động t file cu hình ca ng dng client. Trong
Microsoft Visual Studio .NET, bn có th cu hình địa ch URL động bng cách
thay đổi tùy chn URL Behavior ca Web Reference. Bn cũng có th s dng
công c Web Services Description Language (Wsdl.exe) vi đối s
/appsettingurlkey.
Theo mc định, khi bn to mt lp proxy thì địa ch URL ca dch v Web XML là mã
cng trong phương thc khi dng ca lp proxy này. Bn có th chép đè thiết lp này
trong mã lnh bng cách điu chnh thuc tính Url ca lp proxy sau khi to mt th hin
ca nó. Tuy nhiên, có mt tùy chn khác: cu hình cho lp proxy s dng mt địa ch
URL động.
Trong Visual Studio .NET, bn có th thc hin điu này bng cách chn Web Reference
trong ca s Solution Explorer và thay đổi tùy chn URL Behavior trong ca s
Properties (xem hình 12.1).
The image part with relationsh ip ID rId 7 was not fo und in the file.
Hình 12.1 Cu hình địa ch URL cho dch v Web XML
Sau khi bn thay đổi như trên, địa ch URL ca dch v Web XML s t động được thêm
vào file cu hình ca ng dng client. File cu hình này có tên là Web.config đối vi các
ng dng Web, và [AppName].exe.config đối vi các ng dng khác (lưu ý, ngun xut
hin trong môi trường thiết kế chApp.config, nhưng sau đó s được Visual Studio
.NET đổi tên mt cách t động). Ví d dưới đây là thiết lp được sinh t động trong file
cu hình:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<appSettings>
<add key="AppName.ServerName.ServiceName"
value="http://localhost/WebServices/MyService.asmx"/>
</appSettings>
</configuration>
Bn cũng có th s dng địa ch URL động do công c Wsdl.exe sinh ra. Trong trường
hp này, bn s dng đối s /appsettingurlkey để cho biết tên ca thiết lp cu hình mà
URL s được lưu tr đó. Bn phi to file cu hình bng tay.
wsdl /out:Proxy.cs http://localhost/WebServices/MyService.asmx?WSDL
/appsettingurlkey:MyService
Trong c hai trường hp, mã lnh ca lp proxy s được sa đổi để đọc địa ch URL t
file cu hình. Nếu không tìm thy giá tr cn thiết, nó s mc định s dng địa ch URL
được s dng trong quá trình phát trin ng dng. Cách tiếp cn này cho phép bn đổi địa
ch URL ca dch v Web XML sau khi đã biên dch và trin khai ng dng (ch cn thay
đổi file cu hình).
1.2 S dng k thut response-caching trong dch v Web XML
V
V
Bn mun nâng cao hiu năng ca dch v Web XML bng cách lưu tr giá tr
tr v ca mt phương thc web.
#
#
S dng response-caching bng cách thiết lp thuc tính CacheDuration ca
đặc tính System.Web.Services.WebMethod.
Trong ASP.NET, dch v Web XML h tr response-caching ging ht như các trang web
ASP.NET. Khi response-caching được kích hot, mã lnh ca bn ch thc hin mt ln,
và giá tr tr v ca phương thc web s được lưu li và được tr v trong các ln gi tiếp
theo. Đối vi Web Form, caching được thc hin cho tng form. Đối vi dch v Web
XML, caching được kích hot và cu hình riêng cho mi phương thc web.
Ví d, phương thc web dưới đây tr v giá tr ngày gi hin hành trên máy server.
Thông tin này được lưu li trong mt phút, nghĩa là các li yêu cu tiếp theo trong
khong thi gian này s nhn li thông tin đã được lưu trước đó.
Using System;
using System.Web.Services;
public class ResponseCaching {
[WebMethod(CacheDuration=60)]
public string GetDate() {
return DateTime.Now.ToString();
}
}
Nếu phương thc web ca bn nhn nhiu đối s, ASP.NET s s dng li giá tr đã được
lưu ch khi các giá tr đối s cũng ging như thế. Nếu bn có mt phương thc nhn tm
giá tr rng thì caching tr nên không hiu quđôi khi tr nên lãng phí, vì có quá
nhiu thông tin cn được lưu nhưng ít khi được s dng li. Ví d, s dng caching trong
mt phương thc web thc hin phép tính da trên đầu vào dng s không phi là mt s
la chn tt. Trái li, s dng caching trong mt phương thc web nhn giá tr ID ca
mt nhóm nh sn phm chc chn là mt s la chn tt. Bao gi cũng vy, response-
caching b qua mã lnh ca bn, khiến nó tr nên không đủ tư cách nếu phương thc web
ca bn cn thc hin các hành động khác (chng hn ghi nht ký), hay phương thc web
ca bn ph thuc vào mt s thông tin khác ngoài các đối s được đưa vào (chng hn
thông tin xác thc ca người dùng hay d liu trong phiên làm vic).
# Mt hn chế ca response-caching là nó ch cho phép bn s dng li d liu
trong phm vi ca mt phương thc web. Nếu bn mun s dng li d liu
trong nhiu phương thc web khác nhau, k thut data-caching s hiu qu
hơn.
1.3 S dng k thut data-caching trong dch v Web XML
V
V
Bn cn chy phương thc web ca bn nhưng vn s dng mt s thông tin
đã được lưu. Hoc, bn mun nâng cao hiu năng ca dch v Web XML bng
cách lưu tr mt s d liu, và cn s dng li d liu này trong mt s
phương thc.
#
#
Bn có th lưu bt c đối tượng nào vào cache bng phương thc Insert ca
đối tượng System.Web.Caching.Cache. Bn có th truy xut cache thông qua
thuc tính tĩnh HttpContext.Current.
Cách thc làm vic ca data-caching vi mt dch v Web XML cũng ging như vi mt
trang web. Bn có th lưu tr d liu vào cache bng mã trang web và ly nó v trong
mt dch v Web XML, hay ngược li. Để có thêm thông tin v data-caching và các kiu
chính sách hết hiu lc (expiration policy) mà nó h tr, bn hãy tham kho mc 7.15.
Đim khác bit duy nht gia caching trong mt dch v Web XML và caching trong mt
trang web là: Trong dch v Web XML, bn không th thu ly đối tượng Cache như mt
thuc tính ni ti; thay vào đó, bn cn truy xut cache thông qua thuc tính tĩnh
HttpContext.Current.
Ví d dưới đây trình bày mt dch v Web XML vi hai phương thc web:
GetProductCatalog: Tr v mt DataSet vi các thông tin v sn phm. DataSet này
có th được ly t cache hoc được sinh t động (nếu cn) bng hàm
GetCustomerDataSet.
GetProductList: Cũng s dng DataSet và hàm GetCustomerDataSet nhưng ch ly
mt phn thông tin (tên sn phm).
C hai phương thc web trên đều có th s dng chung d liu đã được lưu, điu này làm
gim nh gánh nng đặt lên cơ s d liu.
using System;
using System.Data;
using System.Data.SqlClient;
using System.Web.Services;
using System.Web;
public class DataCachingTest {
private static string connectionString = "Data Source=localhost;" +
"Initial Catalog=Northwind;user ID=sa";
[WebMethod()]
public DataSet GetProductCatalog() {
// Tr v DataSet (t cache, nếu có th).
return GetCustomerDataSet();
}