CÁC GIẢI PHÁP LẬP TRÌNH C# - Trang 506

506
Chương 12: Dịch vụ Web XML và Remoting

13.

13.

T o ph

ng th c m t chi u

ươ

ứ ộ

T o ph

ng th c m t chi u

ươ

ứ ộ

v i d ch v Web XML hay Remoting

ớ ị

v i d ch v Web XML hay Remoting

ớ ị

Bạn muốn một phương thức web hay một thành phần ở xa thực hiện một tác vụ
kéo dài, và bạn không muốn bắt client phải đợi trong lúc mã lệnh đang thực thi.

Tạo một phương thức web một chiều bằng cách áp dụng đặc tính

SoapDocumentMethod

hay

SoapRpcMethod

và thiết lập thuộc tính

OneWay

của đặc tính

này là

true

. Tạo một phương thức Remoting một chiều bằng cách áp dụng đặc

tính

OneWay

thuộc không gian tên

System.Runtime.Remoting.Messaging

.

Với các phương thức một chiều, client gửi một thông điệp yêu cầu, và server đáp ứng tức thì
để cho biết rằng phương thức đã bắt đầu quá trình xử lý. Cách làm việc này có các hệ quả sau:

Client không cần đợi trong lúc mã lệnh đang thực thi.

Phương thức không thể trả về thông tin nào cho client (thông qua một giá trị trả về hay
một thông số

ByRef

).

Nếu phương thức ném một ngoại lệ chưa-được-thụ-lý, nó sẽ không được truyền về cho
client.

Rõ ràng là các phương thức một chiều không phù hợp khi client cần nhận thông tin từ server.
Tuy nhiên, chúng lại lý tưởng khi cần khởi chạy một kiểu tác vụ nào đó phía server (chẳng
hạn, bắt đầu một công việc xử lý bó).
Để tạo một phương thức web một chiều, bạn cần áp dụng đặc tính

SoapDocumentMethod

(thuộc

không gian tên

System.Web.Services.Protocols

) cho phương thức thích hợp và thiết lập

thuộc tính

OneWay

true

. Ví dụ dưới đây là một dịch vụ Web XML có hai phương thức, mỗi

phương thức đều gây trì hoãn 10 giây. Một trong hai phương thức này sử dụng đặc tính

SoapDocumentMethod

(để client không phải đợi 10 giây).

using System;

using System.Web.Services;

using System.Web.Services.Protocols;

public class OneWayTestWebService {

[WebMethod()]

public void DoLongTaskWithWait() {

// (Bắt đầu một tác vụ kéo dài và khiến client phải đợi.)

Delay(10);

}

[WebMethod, SoapDocumentMethod(OneWay=true)]

public void DoLongTaskWithoutWait() {

Liên Kết Chia Sẽ

** Đây là liên kết chia sẻ bới cộng đồng người dùng, chúng tôi không chịu trách nhiệm gì về nội dung của các thông tin này. Nếu có liên kết nào không phù hợp xin hãy báo cho admin.