Chương 7. Cài đặt các chương trình client
134
7.1.1.2.8. Màn hình minh ha thc hin request WMS – GetMap
Hình 7.8.Màn hình minh ha thc hin request WMS – GetMap
Chương 7. Cài đặt các chương trình client
135
7.1.2. Gi request cho server
Sau khi xây dng xong chui request bng Xml, ta cn phi gi chui
request này lên cho server.
Trong .NET, ta có th thc hin vic gi 1 request lên cho server theo 2 cách
là: đồng b và bt đồng b
7.1.2.1. Thc hin vic gi request bng phương pháp đồng b
Đối vi phương pháp đồng b, sau khi thc hin 1 request thì client phi ch
cho đến khi nhn xong response t server, nó mi có th thc hin tiếp các
tác v khác. Do đó, trong lúc nhn response t server thì client không th
làm được vic gì khác.
Để gi request bng phương pháp đồng b, ta s dng 2 lp là
HttpWebRequest HttpWebResponse.
7.1.2.1.1. Gi request bng phương pháp dng b vi giao thc HTTP GET
Trong trường hp này chui URL có th cha thêm các thông tin khác.
Ví d dưới đây gi request đến 1 server có chui URL là
string sURL =
“http://localhost/OpenGISServer/VNesOpenGISServer.aspx?SERVIC
E=WFS&
VERSION=1.0.0&REQUEST=GetFeature&TypeName=buudien,quan,duong”
Chui URL này có thêm các tham s là SERVICE, VERSION,
REQUEST, TypeName.
To đối tượng HttpWebRequest và gi chui URL
System.Net.HttpWebRequest httpRequest =
System.Net.HttpWebRequest)System.Net.WebRequest.Create(sURL);
Chương 7. Cài đặt các chương trình client
136
Nhn kết qu tr v dưới dng 1 stream.
System.Net.WebResponse httpResponse =
httpRequest.GetResponse();
System.IO.Stream stream = httpResponse.GetResponseStream();
Sau khi nhn dòng d liu này, ta có th ly d liu trong dòng d liu
dưới dng chui hoc lưu dòng d liu xung file.
StreamReader reader = new StreamReader(stream);
Chuyn kết qu sang 1 chui.
string response = reader.ReadToEnd();
Lưu dòng d liu xung file.
FileStream file = new
FileStream("c:\\xml.xml",FileMode.Create,FileAccess.Write);
int ch;
do{
ch = stream.ReadByte();
if (ch!= -1)
file.WriteByte((byte)ch);
}while (ch != -1);
file.Close();
7.1.2.1.2. Gi request bng phương pháp đồng b vi giao thc HTTP POST
Trong trường hp này ni dung cn gi lên server được lưu trong phn body
ca request.
Ví d dưới đây gi 1 request dưới dng POST lên server.
Server có địa ch
sAddress=http://localhost/OpenGISServer/VNesOpenGISServer.aspx
Ni dung cn gi lên server này đưc lưu trong chui sPostContent.
Khi đó vic gi request và nhn response được thc hin như sau:
Chương 7. Cài đặt các chương trình client
137
To đối tượng HttpWebRequest và ghi ni dung ca chui sPostContent
vào phn body ca request.
System.Net.HttpWebRequest myHttpWebRequest =
(System.Net.HttpWebRequest)System.Net.WebRequest.Creat
e(sAddress);
System.Text.ASCIIEncoding encoding=new
System.Text.ASCIIEncoding();
byte[] byte1=encoding.GetBytes(sPostContent);
//Chn loi ContentType ca d liu cn gi lên
myHttpWebRequest.ContentType="application/x-www-form-
urlencoded";
// Xác định chiu dài ca chui cn gi lên
myHttpWebRequest.ContentLength=sPostContent.Text.
Length;
myHttpWebRequest.Method = "POST";
Stream newStream = myHttpWebRequest.GetRequestStream();
newStream.Write(byte1,0,byte1.Length);
newStream.Close();
System.Net.WebResponse httpResponse =
myHttpWebRequest.GetResponse();
System.IO.Stream stream =
httpResponse.GetResponseStream();
StreamReader reader = new StreamReader(stream);
//Chuyn kết qu sang 1 chui.
string response = reader.ReadToEnd();
stream.Close();
httpResponse.Close();
//Ly kết qu tr v.
System.Net.WebResponse httpResponse =
httpRequest.GetResponse();
System.IO.Stream stream =
httpResponse.GetResponseStream();
Chương 7. Cài đặt các chương trình client
138
7.1.2.2. Gi request bng phương pháp không đồng b
Khi gi 1 request bng phương pháp không đồng b, ta có th tiếp tc thc
hin các tác v khác trong lúc nhn kết qu tr v bi vì tác v nhn kết qu
t server s được thc hin trong 1 tiu trình khác.
7.1.2.2.1. Gi request bng phương pháp không đồng b vi giao thc HTTP GET
Ví d dưới đây minh ha vic gi request đến server bng phương pháp
không đồng b vi giao thc HTTP GET.
Chương trình dưới đây là 1 chương trình dưới dng console, có chc năng
nhn 1 chui URI t dòng lnh, yêu cu tài nguyên t địa ch đó, in d liu ra
màn hình sau khi nó nhn xong d liu t server.
Chương trình định nghĩa 2 lp là lp RequestState, có tác dng chuyn d
liu qua li gia các các li gi không đồng b và lp ClientGetAsync dùng
để to 1 request bng phương pháp không đồng b
Lp RequestState lưu trng thái ca request trong sut quá trình gi
các hàm để phc v request. Nó cha 1 đối tượng WebRequest và 1 đối
tượng Stream, đối tượng WebRequest cha request hin ti đến tài
nguyên trên server và đối tượng Stream cha dòng d liu nhn được t
response ca server, và 1 đối tung StreamBuilder cha toàn b chui
response. Mt đối tượng RequestState được dùng làm tham s state khi
hàm AsyncCallback được đăng kí vi
hàmWebRequest.BeginGetResponse.
Lp ClientGetAsync cha các hàm và các thuc tính dưới đây:
o Thuc tính allDone cha 1 đối tượng ca lp ManualResetEvent,
dùng để báo hiu khi request hoàn thành.
o Hàm Main() đọc thông tin t dòng lnh và to 1 request đến 1 tài
nguyên trên internet. Nó to 1 đối tung WebRequest wreq và đối
tượng RequestState rs, gi hàm BeginGetResponse để bt đầu quá