Lập trình web nâng cao XML - Trường CĐN Đà Lạt - 17

Tập tin stockservice.asmx chứa đọan mã cho ví dụ nhà cung cấp dịch vụ thông tin chứng khoán. StockService được thiết kế để trả về thông tin chứng khoán cho một luật chứng khoán. Bây giờ, đừng ngại về làm thế nào dịch vụ này có thể gọi lên. Chúng ta sẽ hiểu trong phần sau khi chúng ta xem thế nào cài đặt một người tiêu dùng cho dịch vụ này.

stockservice.asmx: Một ví dụ dịch vụ Web ASP.NET trả về thông tin chứng khoán

<%@ webservice language="C#" class="StockService" %> using System;

using System.Collections; using System.Web;

using System.Web.Services; [WebService(Namespace="http://mspress.microsoft.com/corexml/")] public class StockService : WebService

{

/* Hashtable used to store our sample stocks */ private static Hashtable Stocks;

public StockService()

{

StockInfo si;

/* the following code populates our Stocks Hashtable with some sample stocks */


Stocks = new Hashtable(); si = new StockInfo(); si.Code = "MSFT";

si.Company = "Microsoft Corporation"; si.Sector = "Technology";

si.Industry = "Software and Programming"; si.Price = 73.00;

Stocks.Add( si.Code, si ); si = new StockInfo(); si.Code = "IBM";

si.Company = "Int'l Business Machines"; si.Sector = "Technology";

si.Industry = "Computer Hardware"; si.Price = 113.00;

Stocks.Add( si.Code, si ); si = new StockInfo(); si.Code = "GE";

si.Company = "General Electric Company"; si.Sector = "Conglomerates";

si.Industry = "Conglomerates"; si.Price = 48.00;

Stocks.Add( si.Code, si ); si = new StockInfo(); si.Code = "SONY";

si.Company = "Sony Corporation"; si.Sector = "Consumer Cyclical"; si.Industry = "Audio & Video Equipment"; si.Price = 65.80;

Stocks.Add( si.Code, si );

}

/* returns StockInfo object for a given stock code */

[WebMethod(Description="Returns company info and current quote price for a given stock code",EnableSession=false)]

public StockInfo GetStockInfo( string Code )

{

return ( InternalGetStockInfo( Code ) );

}

/* returns the quote price for a given stock code */

[WebMethod(Description="Returns current quote price for a given stock code",EnableSession=false)]

public double GetQuotePrice( string Code )

{

StockInfo si = InternalGetStockInfo( Code ); if ( si.Code.Equals( Code ) )

{

return ( si.Price );

}

else

{

return ( 0.00 );

}

}

/* Internal method that returns a StockInfo object for a given stock code. Note that in a real application, you will probably be calling another service or querying a database here to obtain the information. */

private StockInfo InternalGetStockInfo( string Code )

{

StockInfo si;

if ( Stocks.ContainsKey( Code ) )

{

si = (StockInfo)Stocks[ Code ];

}

else

{

si = new StockInfo(); si.Code = ""; si.Company = ""; si.Sector = ""; si.Industry = ""; si.Price = 0.00;

}

return ( si );

}

}


/* struct used to hold stock information */ public struct StockInfo

{

public string Code; public string Company; public string Sector; public string Industry; public double Price;

}

Dòng đầu tiên chứa chỉ dẫn dịch vụ web ASP.NET, chúng khai báo rằng người cung cấp của chúng ta viết trong C# và cài đặt lớp gọi là StockService.

<%@ webservice language="C#" class="StockService" %>

Kế tiếp, chúng ta nhập khẩu các thư viện cần thiết. Trong trường hợp này, những thư viện này gồm không gian tên System, System.Collections, System.Web và System.Web.Services. Không gian tên System.Web và System.Web.Services tham chiếu đến các kiểu, đối tượng ASP.NET và dịch vụ Web. Không gian tên System.Collections chứa lớp Hashtable mà chúng ta dùng để lưu trữ thông tin chứng khoán.

Chúng ta khai báo cài đặt lớp của chúng ta, StockService, được thừa kế từ lớp WebService. Chúng ta cũng đánh dấu dịch vụ web của chúng ta với một không gian tên XML gọi là http://mspress.microsoft.com/corexml/. Với các dịch vụ Web của chúng ta, chúng ta phải thay thế nó với không gian tên XML của công ty bạn hay của cá nhân bạn.

[WebService(Namespace="http://mspress.microsoft.com/corexml/")] public class StockService : WebService

Với ví dụ này, chúng ta sử dụng một Hashtable để lưu trữ thông tin chứng khoán của chúng ta. StockService kiến tạo Hashtable này với vài chứng khoán mẫu. Chú rằng, chúng ta sử dụng một cấu trúc C# để lưu trữ vài thành phần của dữ liệu tạo thành thông tin chứng khoán của chúng ta. Cấu trúc này, gọi là StockInfo, được khai báo ở cuối của tập tin StockService.asmx.

Các phương thức của một cài đặt lớp không tự động có khả năng gọi thông qua Web. Những phương thức này gọi là những phương thức Web. Để định nghĩa một phương thức Web, áp dụng thuộc tính WebMethod đến bất kỳ phương thức nào kiểu public là chúng ta đã ấn hành như phương thức Web. Dịch vụ web có hai phương thức Web, GetStockInfo() và GetQuotePrice(). GetStockInfo() trả về một cấu trúc StockInfo() cho về mã chứng khoán và GetQuotePrice() trả về điểm cho một mã kế toán.

Giống như những thuôc tính khác, thuộc tính WebMethod cung cấp một vài thuộc tính tùy chọn giồng như sau:

Các thuộc tính WebMethod


Thuộc tính

Tham số

Diễn giải

BufferResp onse

Boolean

Chỉ định phương thức Web này có đầu ra thông qua đối tượng Response của ASP.NET có dùng bộ đệm hay

không.

CacheDura

tion

int

Chỉ định thời gian bằng giây để giữ đáp ứng của phương thức này. Mặc định là không dùng. (0 giây)

Description

string

Cung cấp một diễn giải cho phương thức Web này. Nó sẽ được bao gồm

trong WSDL.

EnableSes

sion

Boolean

Chỉ định chúng ta muốn sử dụng

trạng thái session cho phương thức Web này hay không. Mặc định là true.

MessageN

ame

string

Cho phép chúng ta chỉ định tên cho phương thức web của chúng ta, nó sẽ khác nhau trong cài đặt lớp. Phương

thức này thường là phương thức quá tải.

Transactio

n

enumerated (Disabled, NotSupported, Supported, Required, RequiresNew)

Chỉ định cách thức giải quyết cho phương thức Web này. Mặc định là Disabled.

Có thể bạn quan tâm!

Xem toàn bộ 258 trang tài liệu này.

Những gì chúng ta cần cho một dịch vụ Web. Chúng ta không cần biên dịch cho tập tin nguồn. Tập tin StockService.asmx nằm trong một thư mục ảo IIS và chúng ta có thể truy cập dịch vụ Web của chúng ta từ bất kỳ trình duyệt Web nào. Với ví dụ của chúng ta, chúng ta sử dụng thư mục ảo mặc định hay root, song dịch vụ Web của chúng ta có thể được truy cập thông qua URL sau:

http://localhost/StockService.asmx Các dịch vụ chi phối

Một trong nhiều đặc tính hữu ích được cung cấp tự động khi bạn phát triển những dịch vụ Web sử dụng ASP.NET là hệ thống khách hàng xây dựng trong tương tác từ bất kỳ bộ duyệt nào. Trước khi chúng tôi cho thấy bạn làm sao bạn có thể xây dựng khách hàng của riêng mình.

Người dùng ASP.NET xây dựng trong

Để xem khách hàng xây dựng trong trong một hành động cho bản thân chúng ta, mở trình duyệt của chúng ta và trỏ đến URL StockService.asmx của chúng ta. Sau đây là hình minh họa khi mở trong Microsoft Internet Explorer.

Trang Web này được sinh tự động thông qua ASP NET mà không cần phát sinh mã lệnh 1

Trang Web này được sinh tự động thông qua ASP.NET mà không cần phát sinh mã lệnh.

Trang đầu tiên sẽ hiển thị danh sách các phương thức Web mà chúng ta đã định nghĩa trong dịch vụ web như những liên kết có thể click được. Những lien kết này sẽ tự động sinh ra các trang mà chúng ta có thể kêu gọi những phương thức này. Thêm vào đó, trang này cũng cung cấp một liên kết sinh ra tài liệu WSDL cho dịch vụ Web của chúng ta. Hình sau cho chúng ta thấy khi chúng ta click lên liên kết Service Description:

Giống như rất nhiều đặc tính bạn được nhìn thấy cho đến lúc này WSDL này 2

Giống như rất nhiều đặc tính bạn được nhìn thấy cho đến lúc này, WSDL này được sinh ra tự động bởi ASP.NET. Bạn đơn giản viết dịch vụ Web của chúng ta và ASP.NET sẽ sử dụng phản xạ để tự động phát sinh tài liệu WSDL tương ứng cho chúng ta.

Nếu chúng tôi nhấn chuột lên một trong những phương thức web trong hình trên sẽ xem thấy hình như sau (chi tiết cho phương thức GetStockInfo())

Chúng ta phải hiểu rõ rằng trang này là một khách hàng thật sự Khách hàng này 3

Chúng ta phải hiểu rõ rằng trang này là một khách hàng thật sự. Khách hàng này có thể sẽ là một công cụ tốt cho thử nghiệm, sử dụng HTTP GET để kết nối với nhà cung cấp dịch vụ Web. Nó cung cấp một biểu mẫu HTML để cho phép nhập giá trị cho các tham số cho các phương thức Web. Trong trường hợp này, phương thức Web GetStockInfo(), chúng ta có thể nhập một giá trị cho tham số Code. Hình sau là trang web kết quả khi chúng ta nhập “MSFT” trong hộp nhập Code:

Đây là đáp ứng khi chúng ta triệu gọi phương thức Web của chúng ta sử dụng 4


Đây là đáp ứng khi chúng ta triệu gọi phương thức Web của chúng ta sử dụng HTTP GET hay HTTP POST, đó là một phần mà khách hàng sử dụng. Một đáp ứng SOAP sẽ khác nhau nhỏ.

Quay trở lại với phương thức web GetStockInfo trong hình trên, chúng ta thấy rằng, ngoài việc giả sử triệu gọi đến việc triệu gọi một phương thức web, chúng ta cũng có những sự mô tả hữu ích của để truy nhập phương pháp đặc biệt này sử dụng SOAP, HTTP GET, và HTTP POST. Bạn cũng xem cái gì những sự đáp lại tương ứng của chúng như thế nào. Chẳng hạn, trang này cho thấy sự triệu gọi phương thức GetStockInfo() qua SOAP, chúng ta phải theo các sự giao dịch HTTP sau:

POST /StockService.asmx HTTP/1.1 Host: localhost

Content-Type: text/xml; charset=utf-8 Content-Length: length

SOAPAction: "http://mspress.microsoft.com/corexml/GetStockInfo"

<?xml version="1.0" encoding="utf-8"?>

<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap=


"http://schemas.xmlsoap.org/soap/envelope/">

<soap:Body>

<GetStockInfo xmlns="http://mspress.microsoft.com/corexml/">

<Code>string</Code>

</GetStockInfo>

</soap:Body>

</soap:Envelope>

Như chúng ta thấy, khách hàng ASP.NET xây dựng trong là thành phần giàu có. Tuy nhiên, nó được dự định sự sử dụng tương tác, không phải cho sự truy cập tự đồng bằng chương trình. Để có khả năng truy nhập dịch vụ Web StockService theo chương trình tự động, chúng ta cần tạo khách hàng riêng của mình.

Việc viết khách hàng của riêng mình có lẽ đã trông như một nhiệm vụ nản chí trên toàn bề mặt, một cách đặc biệt khi chúng ta trực tiếp cho rằng một khách hàng đúng hữu ích sẽ cần giải quyết những nhân tố như SOAP và WSDL. May mắn, ASP.NET đến sự giải thoát của chúng ta một lần nữa. Bây giờ, chúng ta hãy học làm thế nào để sử dụng các thành phần và công cụ cung cấp bởi .NET framework.

Tạo một khách hàng .NET

Cài đặt một khách hàng sử dụng .net framework mang lại một ngạc nhiên giản dị. Nhiệm vụ rất được đơn giản hóa xuyên qua chức năng gắn sẵn sử dụng những lớp uỷ nhiệm, nó chứa các nội hàm tự động xử lý tất cả các chi tiết của việc triệu gọi những dịch vụ Web XML, giống như tạo một yêu cầu HTTP và xây dựng và phân tích những thông điệp SOAP. Mục

đích là triệu gọi những dịch như dễ dàng như triệu gọi các đối tượng cục bộ. Những thành phần lớn trong .NET là chúng ta không cần phải tạo những lớp ủy nhiệm cho những dịch vụ của chúng ta. .NET cung cấp một vài công cụ để giúp chúng ta tạo các lớp ủy thác đến dịch vụ Web XML một cách tự động, một trong số chúng là wsdl.exe.

Dòng lệnh sau đây cho thấy làm thế nào chúng ta có thể sử dụng wsdl.exe để sinh các lớp ủy thác cho dịch vụ web StockService. Ứng dụng wsdl.exe sử dụng thông tin tìm thấy trong tài liệu WSDL để xây dựng một lớp ủy thác làm cho thích ứng với các chỉ định dịch vụ web.

wsdl /language:cs /protocol:soap http://localhost/StockService.asmx?wsdl

Dòng lệnh này sẽ sinh một tập tin lớp ủy thác gọi là StockService.cs. Tham số đầu tiên,

/language:cs chỉ định rằng chúng ta muốn sinh một lớp ủy thác được viết trong C#. Tham số thứ hai, /protocol:soap, chỉ định rằng sinh lớp ủy thác sẽ sử dụng giao thức SOAP để nói đến dịch vụ web StockService. Những giá trị hợp lệ khác là httpget và httppost cho các phương thức GET và POST của giao thức HTTP. Tham số cuối cùng chỉ định vị trí của tài liệu WSDL cho StockService. Nó có thể là một URL hay là sự chỉ định một tập tin.

Thậm chí lớp ủy thác StockService.cs của chúng ta được ghi trong C#, bằng cách biên dịch sang một DLL, chúng ta có thể sử dụng ủy thác này từ phát triển người dùng trong các ngôn ngữ .NET cung cấp. Câu lệnh sau sử dụng bộ biên dịch csc.exe để biên dịch lớp ủy thác StockService.cs vào một DLL:

csc /t:library /r:system.web.services.dll StockService.cs

Thực thi câu lệnh này sẽ sinh một tập tin DLL StockService có thể tham chiếu trong dự án khách hàng của chúng ta. Với lớp uỷ nhiệm StockService, việc viết một khách hàng dịch vụ Web StockService của chúng ta gần như bình thường. Tập tin net_consumer.cs cho thấy một ví dụ như một khách hàng.

net_consumer.cs: Một khách hàng .NET của dịch vụ web StockService using System;

public class TestStockService

{

public static void Main( string[] Args )

{

/* make sure the user has specified a stock code */ if ( Args.Length < 1 )

{

Console.WriteLine( "usage: teststockservice stock_code" ); return;

}

/* sc contains the user specified stock code */ string sc = Args[ 0 ];

/* Instantiate the StockService's proxy class */ StockService ss = new StockService ();

/* Invoke GetBooks() over SOAP and get the data set. */ StockInfo si = ss.GetStockInfo( sc );

/* Display the results */

Console.Write( "Stock Code: " ); Console.WriteLine( si.Code ); Console.Write( "Company : " ); Console.WriteLine( si.Company ); Console.Write( "Industry : " ); Console.WriteLine( si.Industry ); Console.Write( "Sector : " ); Console.WriteLine( si.Sector ); Console.Write( "Price : " ); Console.WriteLine( si.Price );

}

}

NET_Consumer.cs là một ứng dụng dòng lệnh đơn giản, cho một mã chứng khoán chỉ định trên dòng lệnh sẽ hiển thị thông tin chứng khoán tương ứng. Xem làm thế nào để dịch vụ web StockSerivice bằng cách sử dụng phép toàn new để khởi tạo một thể hiện của lớp StockService:

StockService ss = new StockService ();

Biến ss giữ một tham chiếu đến StockService có thể sử dụng để truy cập các phương thức web được cung cấp bởi dịch vụ Web StockService. Ví dụ, trong NET_Consumer.cs, để

triệu gọi phương thức Web GetStockInfo() chúng ta đơn giản gọi phương thức tương ứng trong ủy thác:

StockInfo si = ss.GetStockInfo( sc );

Phần còn lại của NET_Consumer.cs sẽ hiển thị thông tin trả về trong cấu trúc StockInfo.

Để biên dịch NET_Consumer.cs, nhập đoạn lệnh sau:

csc /r:System.dll /r:StockService.dll NET_Consumer.cs

Chúng ta gộp theo một tham chiếu đến tập tin DLL của StockService được sinh ra trước đây. Chỉ dẫn biên dịch này sẽ liên kết lớp ủy thác với NET_Consumer.cs. Hình sau sẽ cho thấy đầu ra của biên dịch và chạy NET_Consumer.cs:

Bây giờ, chúng ta xem làm thế nào để tạo một khách hàng sử dụng ASP.NET.

Tạo một khach hàng không NET Nó sẽ giới hạn nếu các dịch vụ web phát triển 5

Tạo một khach hàng không .NET

Nó sẽ giới hạn nếu các dịch vụ web phát triển sử dụng .NET framework có thể truy cập bởi một khách hàng dựa trên .NET. Chúng ta có thể truy cập dịch vụ web dựa trên .NET từ bất kỳ khách hàng nào

Bạn có thể Sự truy nhập. Những công tác (dịch vụ) Mạng trên nền Mạng(lưới) từ bất kỳ khách hàng nào như dài như họ dính chặt đến những thuyết minh những công tác (dịch vụ) Mạng. Trong thực tế, khi nó đến sự hỗ trợ Xà phòng và những công tác (dịch vụ) Mạng , bạn sẽ không tìm thấy sự thiếu (của) sự phát triển sẵn có toolkits từ những nhà cung cấp cả thương mại lẫn không thương mại. Để đưa cho bạn một chân lên trên trên việc tìm thấy một số những công cụ này, những danh sách 7-3 Bảng một số toolkits hiện thời sẵn có cộng những sự mô tả của họ và những trang web dinh chặc với các chỉ định dịch vụ Web. Trong thực tế, nó hỗ trợ cho SOAP và các dịch vụ Web, bạn sẽ không tìm thấy sự thiếu của sự phát triển sẵn có trong bộ kit từ những nhà cung cấp cả thương mại lẫn không thương mại. Để đưa cho bạn một chân lên trên trên việc tìm thấy một số những công cụ này, bảng sau liệt kê một số bộ công cụ hiện thời sẵn có cộng những sự mô tả của họ và những trang web.

soap_toolkit_consumer.vbs: Một khách hàng ví dụ sử dụng SOAP Toolkit. ' instantiate MSSOAP object

set SoapClient = CreateObject( "MSSOAP.SoapClient" ) ' setup client proxy from the StockService's WSDL

call SoapClient.MSSoapInit( "http://localhost/ StockService.asmx?wsdl" )

' at this point you can access all the methods exposed by ' StockService through the SoapClient proxy object

' ask user for the stock code

code = InputBox( "Enter Stock Code" )

' invoke the GetQuotePrice method and display the result WScript.Echo "Price = " & SoapClient.GetQuotePrice( UCase( code ) )


Một vài bộ kit dịch vụ SOAP và dịch vụ Web

Bộ kit

Ngôn ngữ/nền tảng

Địa chỉ Web

Microso

ft SOAP

Có thể sử dụng bởi bất kỳ

http://msdn.microsoft.com/library/en- us/soap/htm/soap_overview_3drm.asp

Ngôn ngữ/nền tảng

Địa chỉ Web

Toolkit

ngôn ngữ tương thích COM

chẳng hạn Microsoft Visual Basic, Borland Delphi, …


IBM

Web Services Too1kit (WSTK)


Java 2


http://www.alphaworks.ibm.com/tech/webservicesto

olkit

Apache SOAP

Java 2

http://xml.apache.org/soap/index.html

SOAP:

Lite

Perl

http://www.soaplite.com

Web Services for Python


Python


http://sourceforge.net/projects/pywebsvcs/

..... Xem trang tiếp theo?
⇦ Trang trước - Trang tiếp theo ⇨

Ngày đăng: 19/11/2023