Tên bài viết: SOAP and .NET Remoting
Tác giả: Quang.It / Nguồn C-sharp
Cấp độ bài viết: Cơ bản
Tóm tắt: Tìm hiểu giao thức Soap và .NET remoting
SOAP and .NET Remoting
Simple Object Access Protocol (SOAP) là một giao thức chuẩn công nghiệ được thiết kế để cải thiện khả năng tương tác qua nền tảng bằng cách sử dụng World Wide Web và Extensible Markup Language (XML- ngôn ngữ đánh dấu). Với sự ra đời của XML như là một cú pháp tài liệu gắn thẻ tiêu chuẩn, dẫn xuất đã bắt đầu xuất hiện trong phạm vi. XML phát triển thành SOAP, và SOAP đã phát triển thành BizTalk. Như vậy, SOAP và BizTalk có thực sự không có quan hệ, nhưng các tài liệu XML chuyên ngành. Trước sự xuất hiện của SOAP, Microsoft thực hiện COM + (một phần mở rộng của Component Object Model), những người ủng hộ được hỗ trợ Java Enterprise JavaBeans (EJB), và các công ty khác hỗ trợ đối tượng thường gặp yêu cầu trung gian Kiến trúc (CORBA). Trong thực tế, tất cả các mô hình này đã cố gắng để làm cho việc sử dụng thành phần từ xa dễ dàng và an toàn. Tuy nhiên, chúng chỉ xử lý các thành phần của cùng một kiểu, không ai trong số họ có thể giao tiếp với những người khác. SOAP đã thể hiện khả năng này. Nó giải quyết vấn đề không tương thích nền tảng trong việc tiếp cận dữ liệu. Đó là một cú pháp cho phép bạn xây dựng ứng dụng từ xa gọi các phương pháp trên các đối tượng. SOAP loại bỏ các yêu cầu mà hai hệ thống phải chạy trên nền tảng giống nhau hoặc được viết bằng ngôn ngữ lập trình như nhau. Thay vì cách gọi phương pháp nhị phân thông qua một giao thức độc quyền, một gói SOAP cú pháp sử dụng một tiêu chuẩn mở cho các phương pháp thực hiện phương thức gọi. Đó là cú pháp XML.
SOAP là chỉ đơn giản bằng XML cộng với Hypertext Transfer Protocol (HTTP). SOAP gửi một XML yêu cầu đến một máy chủ SOAP trên HTTP và nhận được phản hồi trở lại trong XML. Bởi vì HTTP trên thực tế là phương thức giao tiếp trên Internet, với tất cả các máy chủ Web công nhận và đáp ứng một yêu cầu HTTP, nó là một giao thức lý tưởng cho phép tích hợp các hệ thống khác nhau. XML đang nổi lên như một tiêu chuẩn de facto trao đổi thông tin giữa các hệ thống khác nhau. Việc sử dụng SOAP của XML để gửi và nhận tin nhắn đảm bảo rằng bất kỳ hệ thống trên nền tảng nào cũng có thể đọc và xử lý tin nhắn, không giống như với một định dạng sở hữu độc quyền.
Hiện tại công nghệ như Distributed Component Object Model (DCOM) hoặc CORBA cho phép các thành phần được phân phối, tuy nhiên, DCOM và CORBA sử dụng gọi thủ tục từ xa (RPC) để liên lạc, mà không làm việc tốt trên Internet. Hơn nữa, cả hai máy khách và máy chủ phải có cùng một hoặc tương tự hệ thống và hệ điều hành cho DCOM hay CORBA để làm việc. Thiết lập thời gian cũng có thể cần thiết để thực hiện các giải pháp làm việc. Đối với những lý do này, chúng tôi không coi giải pháp DCOM và CORBA như hỗ trợ các thành phần được phân phối đúng sự thật. Với phân phối các thành phần đúng, khách hàng và máy chủ có thể khác nhau. Các máy khách và máy chủ có thể có hệ điều hành khác nhau và chạy trên các loại máy và các mạng lưới khác nhau. Bởi vì SOAP sử dụng XML trên HTTP để giao tiếp, nên nó cung cấp đúng thành phần được phân phối hỗ trợ.
SOAP không phải là một thay thế cho COM hay CORBA, tuy nhiên, COM và CORBA có thể sử dụng SOAP để cho phép họ làm việc qua mạng Internet. SOAP sử dụng các tiêu chuẩn thông dụng XML và HTTP để thúc đẩy khả năng tương tác giữa các hệ thống không đồng nhất bất cứ nơi nào trên Internet. Dịch vụ Web đang nhanh chóng nổi lên như một mô hình giải pháp mới, và nó sẽ không được quá lâu trước khi bạn bắt đầu sử dụng SOAP để xây dựng các dịch vụ Web. Dịch vụ Web lộ dữ liệu thông qua Web mà không cần định dạng nó. Hãy suy nghĩ các dịch vụ web như các ứng dụng mà làm cho nó có thể cho bạn vào chương trình bằng cách sử dụng dữ liệu có sẵn trên Web, cũng như chương trình bây giờ bạn có thể sử dụng dữ liệu có sẵn trong nội bộ. Các ứng dụng trên nền tảng khác nhau chỉ có một khả năng giới hạn chia sẻ dữ liệu. . Nhận thức được những hạn chế, các nhà phát triển đã đẩy áp đảo để thành lập các tiêu chuẩn cho các định dạng dữ liệu và trao đổi dữ liệu. Điều này xuất phát từ một tầm nhìn đó là nhanh chóng phát triển thành một mô hình điện toán mới: các liền mạch, Web cho phép tích hợp các dịch vụ trên phần cứng truyền thống và các rào cản phần mềm.
Giới thiệu về SOAP
A SOAP document is an electronic envelope into which you place your payload. Một tài liệu SOAP là một bao thư điện tử mà bạn đặt vào trọng tải của bạn. The payload consists of the tags that describe the method you want to invoke and the data that method invocation needs to do its job. tải trọng này bao gồm các từ để mô tả các phương pháp bạn muốn gọi và dữ liệu mà phương pháp gọi trình cần làm công việc của mình. A SOAP envelope document has two sub elements the SOAP:Header and SOAP:Body. Một phong bì tài liệu SOAP có hai yếu tố phụ của SOAP: Đầu trang và SOAP: cơ thể. The SOAP:Header element contains information about the transaction. Các SOAP: Header phần tử chứa thông tin về giao dịch. The Body contains the content data. Cơ thể chứa các dữ liệu nội dung. (Note that in our examples we will refer to HTTP protocol when we mean SOAP communication protocol, but other protocols will be supported by new SOAP versions.) (Lưu ý rằng trong ví dụ của chúng tôi, chúng tôi sẽ giới thiệu đến giao thức HTTP khi chúng tôi có nghĩa là giao thức truyền thông SOAP, nhưng các giao thức khác sẽ được hỗ trợ bởi phiên bản mới SOAP.)
Như bạn có thể nhìn thấy trong hình , một khách hàng gửi một yêu cầu SOAP (định dạng XML) trên bất kỳ giao thức SOAP đã hỗ trợ (ví dụ, HTTP) cho một “người nghe” máy chủ SOAP tại một trang web khác. Điều này nghe bắt máy chủ nhắn tin, diễn giải các yêu cầu, và chạy sẽ là một phương pháp trên một đối tượng trong miền của mình. Đó là một cái gì đó trả về đối tượng hữu ích (định dạng XML phản ứng) để ứng dụng của chúng ta bằng cách trả lời thông qua các máy chủ SOAP để chờ đợi ứng dụng client.
lưu ý rằng các đối tượng được gọi không cần bất kỳ loại sửa đổi.[/FONT] Các máy chủ SOAP sẽ giải thích các tài liệu SOAP XML mà đến trên HTTP, truyền Control Protocol (TCP), hoặc đơn giản Mail Transfer Protocol (SMTP) kết nối. Sau đó máy chủ SOAP biến các tài liệu XML thành một cái gì đó có ý nghĩa rằng các đối tượng hiểu. Các máy chủ SOAP nói ngôn ngữ SOAP và ngôn ngữ của đối tượng được gọi, dịch hội thoại giữa chúng. Do đó, đối tượng có thể được phát triển trong bất kỳ ngôn ngữ lập trình trên bất kỳ hệ điều hành hay nền tảng.
Một gói SOAP (hình) chỉ đơn giản chứa thông tin được sử dụng để gọi một phương thức. Nhưng các đặc điểm kỹ thuật SOAP không định nghĩa thế nào phương pháp mà là để được gọi. Nó chỉ chứa những gì để gọi với cái gì, không làm thế nào để gọi. Điều này làm cho máy khách và máy chủ truyền thông lỏng và hầu hết miễn phí. Mặt khác, một vài thứ SOAP không làm tốt.Nó không cung cấp bất kỳ phương tiện để giao tiếp hai chiều, loại an toàn, phân phối thu gom rác, hoặc tin nhắn có chứa nhiều hơn một tài liệu thương mại (tin nhắn SOAP có thể chứa chỉ có một tài liệu thương mại!). Tuy nhiên, SOAP cho phép chúng ta vượt qua các thông số và lệnh giữa HTTP, TCP, và SMTP khách hàng và máy chủ, và điều này được thực hiện độc lập của bất kỳ nền tảng, hệ điều hành, hoặc các ứng dụng. Tất nhiên, các lệnh và các thông số thông qua trở lại và ra là tất cả mã hóa trong ứng dụng SOAP Client gửi yêu cầu Data SOAP Server từ xa chỉ có Object Currently HTTP / HTTPS, nhưng trong tương lai, SMTP, FTP, hoặc thực hiện Nghị định thư khác bằng cú pháp XML SOAP. XML cung cấp cho chúng ta một cú pháp định dạng mà để thể hiện gần như bất kỳ loại dữ liệu nào. Refer to the XML chapter if you need a refresher on XML. Hãy tham khảo các chương XML nếu bạn cần bồi dưỡng thêm về XML.
Các đặc điểm kỹ thuật xác định các yếu tố SOAP, mà có thể được sử dụng với một yêu cầu SOAP: chúng là những vỏ, đầu, và thân. Vỏ là một container cho đầu và thân. Đầu chứa thông tin về tin nhắn SOAP, và thân có chứa thông điệp thực sự. Không gian tên được sử dụng để phân biệt các yếu tố SOAP từ các yếu tố khác của các tải trọng. For example, SOAPENV: Envelope, SOAP-ENV:Head, and SOAP-ENV:Body are used in a SOAP document. Ví dụ, SOAPENV: Envelope, SOAP-ENV: Head, và SOAP-ENV: Body được sử dụng trong một tài liệu SOAP. Đoạn code dưới cho thấy một schema SOAP cho vỏ của SOAP 1.1.
<?xmlversion="1.0" ?>
<!-- XML Schema for SOAP v 1.1 Envelope -->
<!-- Copyright 2000 DevelopMentor, International Business
Machines Corporation, Lotus Development Corporation,
Microsoft, UserLand Software -->
targetNamespace="http://schemas.xmlsoap.org/soap/envelope/">
<!-- SOAP envelope, header, and body -->
<elementname="Envelope"type="tns:Envelope"/>
<complexTypename="Envelope">
<elementref="tns:Header"minOccurs="0"/>
<elementref="tns:Body"minOccurs="1"/>
<anyminOccurs="0"maxOccurs="*"/>
<anyAttribute/>
</complexType>
<elementname="Header"type="tns:Header"/>
<complexTypename="Header">
<anyminOccurs="0"maxOccurs="*"/>
<anyAttribute/>
</complexType>
<elementname="Body"type="tns:Body"/>
<complexTypename="Body">
<anyminOccurs="0"maxOccurs="*"/>
<anyAttribute/>
</complexType>
<!-- Global Attributes. The following attributes are
intended to be usable via qualified attribute names on any complex type referencing them.-->
<attributename="mustUnderstand"default="0">
<simpleTypebase="boolean">
<patternvalue="0|1"/>
</simpleType>
</attribute>
<attributename="actor"type="uri-reference"/>
<!-- 'encodingStyle' indicates any canonicalization conventions followed in the contents of the containing
element. For example, the value
'http://schemas.xmlsoap.org/soap/encoding/' indicates
the pattern described in SOAP specification. -->
<simpleTypename="encodingStyle"base="uri-reference"
derivedBy="list"/>
<attributeGroupname="encodingStyle">
<attributename="encodingStyle"
type="tns:encodingStyle"/>
</attributeGroup>
<!-- SOAP fault reporting structure -->
<complexTypename="Fault"final="extension">
<elementname="faultcode"type="qname"/>
<elementname="faultstring"type="string"/>
<elementname="faultactor"type="uri-reference"
minOccurs="0"/>
<elementname="detail"type="tns:detail"minOccurs="0"/>
</complexType>
<complexTypename="detail">
<anyminOccurs="0"maxOccurs="*"/>
<anyAttribute/>
</complexType>
</schema>
Khi chúng ta sử dụng HTTP, chúng tôi sử dụng phương thức yêu cầu POST vì với phương thức này, như trái ngược với phương thức GET, kích thước của các tiêu đề HTTP là không giới hạn. Chúng ta sẽ thấy hai loại tiêu đề trong yêu cầu HTTP-phần đầu và phản hồi phần đầu . Xin vui lòng tham khảo các tài liệu RFC2616 (Hypertext Transfer Protocol-HTTP 1,1 bởi R. et al Fielding chi tiết.). Đoạn code dưới cho thấy một ví dụ về một yêu cầu HTTP POST Head. Bạn có thể thêm bất kỳ Head nào bạn muốn HTTP, ví dụ, trong bảng liệt kê SOAP Action là tăng HTTP header SOAP đề cập đến phương pháp từ xa, UpdateData, để được gọi và Uniform Resource Locator của nó (URL).
POST Yêu cầu HTTP Header
POST /Order HTTP/1.1
Content-Type: text/xml
Content-Length: nnnn
SOAPAction: "http://www.mind*****er.com#UpdateData"
Thông tin được gửi đi sẽ được đặt ở đây.
Cho thấy một loại phản hồi tốt-HTTP header.
HTTP Header đáp ứng tốt
200 OK
Content-Type: text/plain
Content-Length: nnnn
Nội dung tại đây.
Cho thấy một header HTTP phản ứng xấu.
HTTP Header đáp ứng Bad
400 Bad Request
Content-Type: text/plain
Content-Length: 0
Một yêu cầu tài liệu SOAP mà không có tiêu đề HTTP được hiển thị trong đoạn code
<SOAP-ENV:Envelope
xsi:schemaLocation=
"http://www.mind*****er.com/schemas/Schema.xsd">
<SOAP-ENV:Headerxsi:type="Mind*****erHeader">
<COM:GUIDxmlns:COM="http://comobject.northwindtraders.com">
10000000-0000-abcd-0000-000000000001
</COM:GUID>
</SOAP-ENV:Header>
<SOAP-ENV:Bodyxsi:type="Mind*****erBody">
<OrderUpdate>
<orderID>0</orderID>
<item>89</item>
</OrderUpdate>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
Schema.xsd File Contents
xmlns:SOAP="http://schemas.xmlsoap.org/soap/envelope">
<xsd:complexTypename="Mind*****erHeader">
<xsd:elementname="GUID"type="string"/>
</xsd:complexType>
<xsd:complexTypename="Mind*****erBody">
<xsd:elementname="OrderUpdate">
<xsd:complexType>
<elementname="orderID"type="integer"/>
<elementname="item"type="double"/>
</xsd:complexType>
</xsd:element>
</xsd:complexType>
</xsd:schema>
Successful SOAP Response Document
<SOAP-ENV:Envelope
xsi:schemaLocation=
"http://www.mind*****er.com/schemas/Schema.xsd">
<SOAP-ENV:Bodyxsi:type="Mind*****erBody">
<OrderUpdate>
<orderID>09999</orderID>
<return>0</return>
</OrderUpdate>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
Faulty SOAP Response Document
<SOAP-ENV:Envelope
xsi:schemaLocation=
"http://www.mind*****er.com/schemas/Schema.xsd">
<SOAP-ENV:Fault>
<SOAP-ENV:faultcode>200</SOAP-ENV:faultcode>
<SOAP-ENV:faultstring>
Must Understand Error
</SOAP-ENV:faultstring>
<SOAP-ENV:detailxsi:type="Fault">
<errorMessage>
The object cannot be found or is not installed.
</errorMessage>
</SOAP-ENV:detail>
</SOAP-ENV:Fault >
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
Sau đây là một ví dụ về một máy chủ SOAP # C / khách hàng với phương pháp triển khai UpdateData:
public int OrderUpdateMethod(ref int OrderID, double Item);
Thông tin thêm về SOAP mã hóa có sẵn tại http://www.w3.org/tr/soap. SOAP được sử dụng rộng rãi bởi các nhà phát triển làm việc với Remoting. NET, dịch vụ web (ASP.NET), và Active Template Library (ATL) Server của C + + bản địa, các dịch vụ Web unmanaged code.
Kết luận
Hy vọng bài viết này sẽ giúp các bạn hiểu SOAP và Remoting. Xem các bài viết khác trên trang web trên và. NET C #.