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

soap skeletal xml Một thông điệp SOAP khung SOAP ENV Envelope xmlns SOAP ENV http schemas 1

soap_skeletal.xml: Một thông điệp SOAP khung

<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>

<SOAP-ENV:Header>

</SOAP-ENV:Header>

<SOAP-ENV:Body>

</SOAP-ENV:Body>

</SOAP-ENV:Envelope>

Phần tử <SOAP-ENV:Envelope> là phần tử gốc của một thông điệp SOAP. Nó cũng được dùng để chỉ rõ những tùy chọn toàn cục đối với toàn bộ thông báo, như những quy tắc mã hóa của những tham số. <SOAP- ENV:Header > là một phần tử tùy chọn cung cấp một cơ chế những người tham gia để thêm mở rộng thông tin về một sự gọi. Nó (thì) điển hình được sử dụng để cung cấp thông tin ngữ cảnh như Điều đó liên quan đến sự an toàn, giao dịch, sự thanh toán, vân vân. <Xà phòng- ENV:Body > phần tử uỷ nhiệm và ở đâu là nội dung thực tế (của) một thông báo cư trú. Đây ở đâu là những tham số phương pháp Được mã hóa và đóng gói.

Một loại thông điệp Soap đặc biệt được gọi là lỗi (fault) dùng để cho biết một yêu cầu nào đó đã thất bại vì một một lí do cụ thể, như là: trường đầu trang không được nhận dạng, lỗi quyền thẩm định hoặc một vài lỗi xảy ra trong khi đang xử lí thông tin.

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

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

Qui luật mã hóa

Thông điệp Soap có những qui luật được định rõ cho việc mã hóa những cấu trúc dữ liệu phức tạp như là những ma trận hay là cấu trúc. Ví dụ được trình bày dưới đây là chuỗi mã hóa ma trận trong thông điệp Soap:


<SOAP-ENC:Array SOAP-ENC:arrayType="xsd:string[4]">

<SOAP-ENC:string>Item 1</SOAP-ENC:string>

<SOAP-ENC:string>Item 2</SOAP-ENC:string>

<SOAP-ENC:string>Item 3</SOAP-ENC:string>

</SOAP-ENC:Array>

Thêm vào đó hệ thống Soap kế tục tất cả những loại dữ liệu giản đồ XML tại

:http://www.w3c.org/TR/xmlschema-2/; do đó, đối với những loại đơn giản giản đồ XML có thể sử dụng trực tiếp trong những giản đồ phần tử.

Cơ chế SOAP RPC

SOAP mã hóa những quy tắc cũng cung cấp sắp xếp và cơ chế unmarshaling đòi hỏi cung cấp RPC- những thao tác hướng.

Những quy tắc mã hóa cũng cung cấp một cơ chế sắp xếp và không sắp xếp theo để cung cấp hoạt động theo hướng RPC. SOAP chỉ rõ những một cơ chế RPC cho phép những ứng dụng để gọi hàm nhận trên sự nhận kết thúc của một thông điệp SOAP. Những tham số của hàm được sắp xếp sử dụng luật mã hóa tiêu chuẩn như một phần của thân thông thiệp

. Ví dụ, phương thức C# sau đây :

public int GetValue( int Arg1, int Arg2 );

có thể được sắp xếp như thông điệp SOAP như sau:

<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"

xmlns:xsd="http://www.w3c.org/2001/XMLSchema/"/>

<SOAP-ENV:Body>

<GetValue>

<Arg1 xsd:type="xsd:int"></Arg1>

<Arg2 xsd:type="xsd:int"></Arg2>

</GetValue>

</SOAP-ENV:Body>

</SOAP-ENV:Envelope>

Chú ý rằng tên của phương thức, GetValue, được mã hóa như một phần tử con của

<SOAP-ENV:Body>.

Các dịch vụ Web

Công nghiệp công nghệ máy tính được biết đến nhờ sự thông thạo của vòng đời siêu cấp, nhưng hiếm khi nhận được một khái niệm nổi từ tối tăm tới " thứ mới " nhanh như những dịch vụ Web. Những nhà cung cấp lớn và nhỏ đang đánh cuộc rằng hướng công nghệ này sẽ giữ lấy và cho phép những khả năng mới cho kinh doanh điện tử. Nhưng cái chính xác là dịch vụ Web?

Thực tế quan trọng đầu tiên mà chúng ta cần phải biết là những dịch vụ web là không phải một công nghệ đơn nhưng một nhóm các liên hệ gần gũi, nẩy sinh những công nghệ thành lập một kiến trúc tính toán phân tán dựa vào những chuẩn của Internet.

Mặc dầu trên bề mặt, điều này có lẽ nghe như mô hình nhà cung cấp dịch vụ ứng dụng, các dịch vụ Web rất khác nhau. Những nhà cung cấp dịch vụ ứng dụng là các ứng dụng hoàn toàn dựa trên nền Web, trong khi những dịch vụ web là những thành phần phần mềm dùng lại được mà cung cấp chức năng riêng biệt. Đồng thời, trong khi những ứng dụng nhà cung cấp dịch vụ ứng dụng được cài đặt như một "hộp đen”, những ứng dụng Web được thiết kế để giữ tính mở rộng cố hữu.

Ví dụ, quan sát những trang đấu giá dựa trên nền Web như eBay hay uBid. Tất cả những trang này đề xuất những dịch bán đấu giá nền tảng HTML có nghĩa sẽ được sử dụng bởi nhiều người. Tuy nhiên, hình dung rằng một công ty đã tìm thấy một nhu cầu cho chức năng bán đấu giá trong những ứng dụng của riêng mình. Công ty này hoặc cần cài đặt chức năng bán đấu giá hoặc gửi gián tiếp khách hàng đến một trang đấu giá. Nếu những chỗ bán đấu giá này có một giao diện dịch vụ mạng, công ty này có thể điều khiển từ xa cần chức năng để xây dựng những ứng dụng của riêng mình.

Như đã nói ở trên, dịch vụ Web không cài đặt trong một con đường chắc chắn, nhưng đại diện cho một tập hợp của vài công nghệ liên quan. Nhìn từ quan điểm của một người phát triển, dịch vụ Web có thể được hiểu như một sự cài đặt đặc biệt của một hệ thống thông điệp dựa trên XML xây dựng trên các thành phần hạ tầng sau:

Sự mô tả dịch vụ web có khả năng tương tác với một dịch vụ Web, một trình khách phải nhận thức về ngữ nghĩa dịch vụ của nó. WSDL là một tài liệu XML sử dụng để diễn giải giao diện của một dịch vụ Web trong một con đường chuẩn hóa và cấu trúc hóa.

Định dạng dịch vụ Web không dây SOAP được sử dụng như một chuẩn định dạng không dây cho dịch vụ Web. Dịch vụ web của sử dụng HPTT, GET và HTTP POST, nhưng đa số sự mong đợi là sử dụng SOAP và sử dụng HTPP POST để là giao thức vận chuyển.

Dịch vụ Web khám phá tạo sự hiện diện của chúng, năng lực và các chức năng thông qua xử lý của sự khám phá. Sự chỉ định UDDI định nghĩa một giản đồ XML và một API cho phép máy khách tìm dịch vụ một một cách động.

Những công nghệ này cùng nhau, HTTP + XML + SOAP + WSDL + UDDI, mẫu công nghệ cấp thấp lõi cho dịch vụ Web.

Những công nghệ cao khác được phát triển để cung cấp nhiện vụ chiến lược cho xử lý kinh doanh. Một trong những công nghệ Web là ngôn ngữ luồng dịch vụ Web được đảm bảo bởi IBM. WSFL nhắm vào định nghĩa một nền tảng bằng cách cài đặt dịch vụ mạng có thể mô tả lôgic doanh nghiệp được yêu cầu để tập hợp những dịch vụ khác nhau vào trong một quá trình xử lý kinh doanh kết thúc-đến-kết thúc (end-to-end).

Diễn giải dịch vụ Web với WSDL

WSDL là IDL của dịch vụ Web. WSDL diễn giải chức năng của một dịch vụ Web và những gì mà chức năng có thể thực hiện được, và cung cấp một trung tâm luật trong sự cho phép thao tác giữa các thành phần của dịch vụ Web. Nó cũng diễn giải đầy đủ chức năng và sử dụng của dịch vụ theo kiểu không phụ thuộc giao thức và nền tảng. Sự diễn giải đầy đủ nhờ các công cụ sử dụng WSDL sinh mã tự động.

WSDL là một chỉ định đề trình của W3C và được cung cấp bởi một số nhà công nghiệp hàng đầu, bao gồm Microsoft và IBM. Ấn bản phiên bản 1.1 có thể xem chi tiết tại http://www.w3.org/TR/wsdl.

Để minh họa cấu trúc của một tài liệu WSDL, cho phép chúng ta hình dung một dịch vụ web, gọi là HelloService, được đưa ra với một phương thức đơn với mã C# sau:

String SayHello( String Name )

Ý tưởng của phương thức SayHello(), khi thực thi sẽ trả về một chuỗi xây dựng bởi sự nối lại của chuỗi “Hello” với tham số Name được truyền vào. Ví dụ, SayHello(Joe) sẽ trả về chuỗi Hello Joe. Ví dụ sau là một yêu cầu SOAP.

sayhello_request.xml: Thông điệp SOAP cho phương thức SayHello

<?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>

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

<Name>Joe</Name>

</SayHello>

</soap:Body>

</soap:Envelope>

Như chúng ta thấy, đây là một thông điệp SOAP chuẩn sử dụng luật mã hóa RPC mà chúng ta từng thấy trước đó khi bàn về SOAP. Sau đây là một đáp ứng SOAP cho yêu cầu của chúng ta.

sayhello_response.xml: Một thông điệp đáp ứng cho tài liệu sayhello_request.xml.

<?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>

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

<SayHelloResult>Hello Joe</SayHelloResult>

</SayHelloResponse>

</soap:Body>

</soap:Envelope>

Thông điệp đáp ứng trả lại chuỗi ghép nối Hello Joe đến máy trạm SOAP.

Bây giờ, chúng ta cần nói về diễn giải dịch vụ nắm giữ yêu cầu này và trả về sự đáp ứng của chúng ta. Để làm điều này chúng ta phải nhìn những chỉ định của cú pháp như ngữ nghĩa, cấu trúc, trong điều kiện của của XML. Mỗi tài liệu WSDL bắt đầu với phần tử gốc

<definitions>, dưới đó là các phần hay phần tử chính.

<type> định nghĩa những kiểu dữ liệu mà dịch vụ Web hoạt động. Phần tử <import> có thể sử dụng trong phần tử <types> để tham chiếu đến một tài liệu giản đồ ngoài.

<message> diễn giải định dạng của mỗi thông điệp yêu cầu và thông điệp đáp ứng. Các kiểu của tham số có thể tham chiếu từ những định nghĩa trong phần <types> hoặc định nghĩa trực tiếp bằng cách sử dụng các dữ liệu mặc định trong giản đồ XML Schema.

<portType> định nghĩa các thông điệp yêu cầu và thông điệp đáp ứng hoặc cả hai (định nghĩa trong <message>) tạo các phương thức riêng biệt (gọi là phương thức Web) trong một dịch vụ Web.

<binding> chỉ định mã hóa và giao thức sử dụng bởi các phương thức web định nghĩa trong phần <portType>.

<service> sử dụng để chỉ định một tên và vị trí vật lý của dịch vụ Web – trong một từ khóa, điểm kết thúc trong dịch vụ như bất kỳ những gì đính trên dịch vụ Web được sử dụng.

Tất cả những điều có thể nghe như tiếng nước ngoài, nhưng giữ chặc chẽ. Cuối cùng, chúng ta xem xét một ví dụ nhanh một diễn giải ví dụ dịch vụ Web của chúng ta trong WSDL, chúng ta bỏ ra vài trang để bàn luần về các phần tử này.

Để diễn giải dịch vụ của chúng ta, chúng ta cần một tập tin tên helloservice.wsdl được minh họa như sau:

helloservice.wsdl: Một tài liệu WSDL ví dụ

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

<definitions name="HelloService" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"

xmlns:tns="http://mspress.microsoft.com/corexml/" xmlns="http://schemas.xmlsoap.org/wsdl/"

targetNamespace="http://mspress.microsoft.com/corexml/">

<types>

<xsd:schema targetNamespace="http://mspress.microsoft.com/corexml/">

<xsd:element name="SayHello">

<xsd:complexType>

<xsd:sequence>

<xsd:element name="Name" type="xsd:string"/>

</xsd:sequence>

</xsd:complexType>

</xsd:element>

<xsd:element name="SayHelloResponse">

<xsd:complexType>

<xsd:sequence>

<xsd:element name="SayHelloResult" type="xsd:string"/>

</xsd:sequence>

</xsd:complexType>

</xsd:element>

</xsd:schema>

</types>

<message name="SayHelloSoapIn">

<part name="parameters" element="tns:SayHello"/>

</message>

<message name="SayHelloSoapOut">

<part name="parameters" element="tns:SayHelloResponse"/>

</message>

<portType name="HelloServiceSoapPortType">

<operation name="SayHello">

<input message="tns:SayHelloSoapIn"/>

<output message="tns:SayHelloSoapOut"/>

</operation>

</portType>

<binding name="HelloServiceSoap" type="tns:HelloServiceSoapPort">

<soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="rpc"/>

<operation name="SayHello">

<soap:operation soapAction="http://mspress.microsoft.com/ corexml/SayHello"/>

<input>

<soap:body use="literal"/>

</input>

<output>

<soap:body use="literal"/>

</output>

</operation>

</binding>

<service name="HelloService">

<port name="HelloServiceSoap" binding="tns:HelloServiceSoap">

<soap:address location="http://localhost/HelloService.asmx"/>

</port>

</service>

</definitions> Types

Trong WSDL, nhiều kiểu sử dụng mô hình XML để định nghĩa. Mô hình có thể vừa được gắn bên trong phần tử <những kiểu>, hay phần tử <nhập khẩu> được sử dụng để tham khảo một tài liệu sơ đồ ngoài. Trong mọi trường hợp chính mô hình sẽ đồng nhất.

Trong helloservice.wsdl chúng tôi sử dụng mô hình XML để định nghĩa những kiểu chúng tôi cần cho yêu cầu và đáp lại những thông điệp Soap. Sau đây là đoạn trích của mã từ tập tin đó:

<types>

<xsd:schema targetNamespace="http://mspress.microsoft.com/corexml/">

<xsd:element name="SayHello">

<xsd:complexType>

<xsd:sequence>

<xsd:element name="Name" type="xsd:string"/>

</xsd:sequence>

</xsd:complexType>

</xsd:element>

<xsd:element name="SayHelloResponse">

<xsd:complexType>

<xsd:sequence>

<xsd:element name="SayHelloResult" type="xsd:string"/>

</xsd:sequence>

</xsd:complexType>

</xsd:element>

</xsd:schema>

</types>

Phần tài liệu này là mô hình XML chuẩn. đối với thông báo yêu cầu chúng tôi định nghĩa chúng tôi sẽ chấp nhận một tham số đơn gọi là Tên , và nó sẽ là một Mô hình XML kiểu xsd:string. Đối với thông báo đáp lại chúng tôi định nghĩa giá trị trở lại ở SayHelloResult, và nó cũng của Mô hình XML kiểu xsd:string .

tagerNameSpace, , http://mspress.microsoft.com/corexml/, khớp với không gian tên kiểu cục bộ (tns) khai báo cho WSDL. Nó chỉ bảo cho bộ xử lý giản đồ rằng các kiểu được định nghĩa trong giản đồ này là một phần của không gian tên, và chúng ta có thể tham chiếu đến chúng sau bằng cách sử dụng tiền tố không gian tên.

Phần tử <types> là tùy chọn và có thể dùng để định nghĩa kiểu phức tạp như kiểu cấu trúc của C#. Với kiểu dữ liệu đơn giản, chẳng hạn tham số Name, chúng ta có thể bỏ qua phân này và sử dụng giản đồ XML một cách trực tiếp khi chúng ta cần tham chiếu đến các kiểu tham số trong phần <message>. Chúng ta sẽ xem xét làm thế nào khi chúng ta bàn về phần <message> dưới đây.


Để thay thế cho sự nhúng một định nghĩa giản đồ trong một tài liệu WSDL, chúng ta có thể sử dụng phần tử <import> để tham chiếu đế một giản đồ ngoài. Ví dụ sau cho thấy việc sử dụng phần tử <import>:

<definitions name="HelloService" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://mspress.microsoft.com/corexml/" xmlns="http://schemas.xmlsoap.org/wsdl/"

targetNamespace="http://mspress.microsoft.com/corexml/">

<import location=http://mspress.microsoft.com/corexml/ HelloService.xsd/>

</definitions>

Trong ví dụ này, chúng ta có thể thấy cách sử dụng thuộc tính vị trí chỉ định một URL thật có thể sử dụng để nhập khẩu giản đồ.

Message

Một phần tử <message> tương đương với một bộ phận đơn của trao đổi thông tin giữa máy trạm và máy chủ. Phương thức yêu cầu – đáp ứng gọi hai thông điệp tương ứng, một cho yêu cầu và một cho đáp ứng.

Thuộc tính tên được dùng duy nhất xác định một thông báo đặc biệt sao cho nó có thể được tham chiếu bởi phần <portType>. Phần tử <section> được dùng để định nghĩa tên và kiểu cho một tham số của phương pháp đơn hay cho giá trị trả về. Chẳng hạn, trong tập tin helloservice.wsdl sau đây định nghĩa một thông báo gọi SayHelloSoapIn có một tham số đơn có kiểu phức tạp, gọi là SayHello, được định nghĩa trong phần <types>:

<message name="SayHelloSoapIn">

<part name="parameters" element="tns:SayHello"/>

</message>

Thuộc tính phần tử được sử dụng để tham chiếu kiểu định nghĩa trong phần <types>. Tuy nhiên, nếu kiểu của một tham số có thể chỉ định bởi một kiểu dữ liệu giản đồ XML, chúng ta có thể dùng thuộc tính kiểu để thay thế. Sau đây là một ví dụ:

<message name="SayHelloSoapIn">

<part name="parameters" type="xsd:string"/>

</message>

Ở đây, chúng ta có diễn giả cho tham số của chúng ta là một kiểu chuỗi. Nếu tất cả các tham số có thể định nghĩa bằng cách sử dụng các kiểu dữ liệu mặc định, chúng ta có thể bỏ qua cả phần <types>.

Một tài liệu WSDL cần khai báo những phần <message> cho tất cả các cách có thể cho các phương thức Web có thể gọi lên, và tất cả các sự đáp ứng có thể. Ví dụ, nếu những dịch vụ web của chúng ta cung cấp các giao thức khác hơn là SOAP, chẳng hạn HTTP GET và HTTP PUT, chúng ta cần bao gồm các phần <message>.

PortType

Phần <portType> xác định tập hợp các phép toán và các thông điệp rắc rối với mỗi phép toán có thể được trưng bày bởi một dịch vụ Web. Một <portType> hoàn chỉnh giao diện định nghĩa như một bộ phận của dịch vụ Web.

Phần <operation> trong sự ấn bản bởi một <portType. Định nghĩa một phương thức Web. Thuộc tính tên chỉ định tên của phương thức Web này. Bên trong phần <operation> chúng ta tìm thấy hai phần tử <input> và <output> tham chiếu kiểu thông điệp định nghĩa trong các phần <message> để định nghĩa thông điệp yêu cầu và đáp ứng một cách tách biệt. Phụ thuộc vào sự có mặt và sự sắp xếp của các phần tử <input> và <output>, bốn kiểu của các phép toán là khả quan.

<input>: Một cách, hoặc chỉ ghi, phương thức chấp nhận một yêu cầu từ một trình khách nhưng không đáp trả.

<input><output>: Một phương thức yêu cầu – đáp trả chấp nhận một yêu cầu từ một trình khách và gởi một đáp trả đến trình khách này.

<output><input>: Một phương thức đáp ứng bằng được gởi một thông điệp đến trình khách và đòi hỏi một sự trả lời từ trình khách.

<output>: Một sự thông báo, hay chỉ đọc, phương thức sẽ gởi một thông điệp đến một trình khách.

Để ví dụ, trong tài liệu helloservice.wsdl, một phương thức Web SayHello được định nghĩa như một phương thức yêu cầu – đáp trả.

<portType name="HelloServiceSoap">

<operation name="SayHello">

<input message="tns:SayHelloSoapIn"/>

<output message="tns:SayHelloSoapOut"/>

</operation>

</portType>

Binding

Phần <binding> được sử dụng để chỉ định chi tiết giao thức cho các hành động khác nhau được định nghĩa trong phần <portType> và chỉ định sự trình bày trên-đường-dây của các thông điệp. Nội dung của phần <binding> là sự chỉ định giao thức với <portType> để trở thành được gắn kết, nhưng mỗi phần <binding> sẽ theo cấu trúc sau:

<binding name="..." type="...">

<!-- binding details for the portType to be bound -->

<operation name="...">

<!-- binding details for this operation -->

<input>

<!-- binding details for this message -->

</input>

<output>

<!-- binding details for this message -->

</output>

</operation>

</binding>

Mỗi phần tử <binding> có một thuộc tính name duy nhất để nhận dạng gắn kết. Nó cũng có thuộc tính type để chỉ định phần tử <portType> như một phần riêng để áp dụng gắn kết.

Đầu tiên, những chi tiết gắn kết cho <portType> có thể được chỉ rõ. Sau đó, chúng ta chỉ rõ những tham số gắn kết cho phép toán định nghĩa trong phần <portType> được chỉ rõ trong thuộc tính type. Cuối cùng chúng ta chỉ rõ những chi tiết gắn cho mỗi thông điệp đầu vào, những thông điệp đầu ra, hoặc cả hai định nghĩa (trong cùng thứ tự) trong bản gốc

<portType>. Đa số những dịch vụ Web sẽ sử dụng SOAP như giao thức dây và, bởi vậy, phép toán SOAP yêu cầu – đáp trả là kiểu kết gắn tiêu chuẩn. Chẳng hạn, đây là phần

<binding> cho HelloService gọi là dịch vụ Web dựa trên SOAP.

<binding name="HelloServiceSoap" type="tns:HelloServiceSoapPortType">

<soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="rpc"/>

<operation name="SayHello">

<soap:operation soapAction="http://mspress.microsoft.com/ corexml/SayHello"/>

<input>

<soap:body use="literal"/>

</input>

<output>

<soap:body use="literal"/>

</output>

</operation>

</binding>

Tham số gắn kết SOAP chỉ định sử dụng 4 phần tử cơ bản đều trong http://schemas.xmlsoap.org/wsdl/soap/namespace. Phần tử <soap:binding> được sử dụng để chỉ định chi tiết về cách truyền tải được sử dụng. Thuộc tính transport chỉ định giao thức truyền tải (HTTP, SMTP, FTP và cả 4) được sử dụng và được chỉ định sử dụng chuẩn URI. Thuộc tính style chỉ định hoặc là phép toán chỉ định bởi <portType> là hướng RPC hay hướng tài liệu. Phần tử này phải được thay thế bởi bất kỳ phần tử <operation> nào.

Với phần tử <soap:operation> SOAP-gắn kết qua-HTTP được chỉ định tiêu đề SOAPAction của yêu cầu HTTP. Phần tử <soap:body> và <soap:header> có thể được sử dụng bên trong phần tử <input> và <output> của phần tử SOAP <Envelope>.

Chi tiết hơn nữa của các đối tượng này và những phần tử gắn kết khác cho những giao thức khác không nằm trong phạm vi cuốn sách này, nhưng chúng ta có thể tham chiếu các chỉ định WSDL tại http://msdn.microsoft.com/xml/general/wsdl.asp.

Service

Phần cuối cùng, <service>, được sử dụng cho các sưu tập của các gắn kết tạo một dịch vụ và kết những cái này cho những địa chỉ vật lý. Phần tử này có một thuộc tính đơn, name, nó được sử dụng để để định nghĩa duy nhất cho dịch vụ Web. Một hay nhiều phần tử <port> bên trong có thể được sử dụng để chỉ định các gắn kết khác nhau và các phép toán kèm được cung cấp bởi dịch vụ Web. Thuộc tính binhding chỉ định tên của phần <binding> sẽ sử

dụng. Mỗi phần tử <port> sẽ chứa các phần tử từ không gian kết gắn được chỉ định, ví dụ,

<soap:addresses>, được sử dụng chỉ định chi tiết địa chỉ trong biểu mẫu cần thiết bởi thành phần gắn kết.

Trong tài liệu helloservice.wsdl, phần <service> chỉ định rằng chúng ta chỉ cung cấp một gắn kết tên HelloServiceSoap và chỉ định rằng các phép toán gắn kết có thể truy cập tại http://localhost/HelloService.asmx.

<service name="HelloService">

<port name="HelloServiceSoap" binding="tns:HelloServiceSoap">

<soap:address location="http://localhost/HelloService.asmx"/>

</port>

</service>

Mặc dù không có gì sẽ nghiêm cấm chúng ta từ mã WSDL bằng tay cho dịch vụ Web của chúng ta, chúng ta phải nhận biết các công cụ chắc chắn, chẳng hạn như asp.net và gói dịch vụ Web IBM có thể giúp sinh các WSDL một cách tự động.

Tạo một dịch Web

Trong phần này, chúng ta sẽ xem xét làm thế nào để chúng ta cài đặt một dịch vụ web và làm thế nào để đưa ra các phương thức bởi dịch vụ. Đầu tiên, chúng ta dùng các công cụ cung cấp bởi .NET framework, chẳng hạn như ASP.NET để cài đặt dịch vụ. Trong những phần tử sau, để minh họa tính không phụ thuộc ngôn ngữ của dịch vụ Web, chúng ta sẽ xem làm thế nào để xây dựng các khách hàng, nó không phải .NET, nhưng nó lại có thể được các dịch vụ cung cấp bởi nhà cung cấp .NET.

Tại thời điểm viết tài liệu này tài liệu SDK của .NET FrameWork vẫn còn là sản phẩm beta. Những ví dụ này đã được kiểm tra trên beta 2 của .NET SDK. Chúng ta có thể tải .NET SDK và tìm thông tin trên .NET tại trang web Microsoft MSDN (http://msdn.microsoft.com/net/).

Mặc dù chúng ta có một vài ví dụ phức tập trong cuốn sách này, chúng ta sẽ sử dụng ASP.NET để xây dựng một nhà cung cấp và khách hàng các dịch vụ web đơn giản. Như chúng ta thấy, ASP.NET sẽ tạo các dịch vụ Web với ít nỗ lực nhất, điều này sẽ rất thú vị cho các nhà phát triển.

Ví dụ cung cấp thông tin chứng khoán qua Web. Tất nhiên, chúng tôi sẽ không đang cung cấp những giá cổ phiếu thời gian thực và thông tin thực tế trong ví dụ nà , nó nằm bên ngoài phạm vi của sách này, nhưng chúng tôi sẽ cung cấp một vài thông tin cổ phần chứng khoán.

Tạo nhà cung cấp

Việc tạo ra một nhà cung cấp dịch vụ web có thể được tổng kết một quá trình xử lý bốn- bước. Trong bước đầu tiên chúng tôi sẽ cần tạo ra một tập tin nguồn mới cho nhà cung cấp. Tập tin này sẽ phục vụ như một điểm toàn cục đến dịch vụ của chúng ta. Tập tin nguồn sẽ là một tập tin văn bản thô với một phần mở rộng .asmx (Ngược với một mở rộng .aspx của một ứng dụng web ASP.NET). Chúng ta cần đặt tập tin này trong một thư mục ảo IIS (Internet Information Server) có cho phép bật executescripts.


Dòng đầu tiên của tập tin này phải chứa một chỉ dẫn ASP.NET đặc biệt:

<%@ webservice %>

Chỉ thị này cho phép bạn khai báo ngôn ngữ lập trình dùng để phát triển nhà cung cấp này và tên của lớp được cài đặt. Chúng ta có tùy chọn để bao gồm cài đặt lớp này trong cùng tập tin, nhưng nó không phải là một yêu cầu.

Kế tiếp, chúng ta cần chỉ dẫn cài đặt của chúng ta để thừa kế từ lớp WebService trong không gian tên System.Web.Services. Bởi sự thừa kế từ WebService, nhà cung cấp của chúng ta có thể truy cập các đối tượng ASP.NET thông dụng như Application, Session, User và Context. Nếu chúng ta muốn nhà cung cấp của chúng ta sẽ công bố việc tiêu thụ thông qua Web, bạn phải chỉ rõ một không gian tên XML cho dịch vụ web của chúng ta. Nhiệm vụ này được hoàn thành bằng việc đánh dấu lớp thi hành với thuộc tính namespace tương ứng. ASP.NET sử dụng giá trị của thuộc tính này trong tài liệu WSDL và trường đầu đề SOAPAction HTTP để định nghĩa duy nhất các điểm cuối có thể gọi bởi Web. Nếu chúng ta không chỉ rõ một thuộc tính namespace, ASP.NET sử dụng giá trị ngầm định của http: // tempuri.org /. Cuối cùng, bất kỳ phương pháp nào bạn muốn để có thể tiếp cận qua web cần phải được đánh dấu với thuộc tính WebMethod.

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

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