1. Trang chủ
  2. » Công Nghệ Thông Tin

Các giải pháp lập trình CSharp- P59 pps

10 148 0
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 10
Dung lượng 2,66 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Bạn có thể sử dụng hai dự án dưới đây: • Một thành phần thư viện lớp Class Library Component bọc lấy các hàm Simple MAPI và làm cho chúng có hiệu lực thông qua các phương thức của lớp..

Trang 1

471 Chương 11: Lập trình mạng

SmtpMail.SmtpServer = "test.mailserver.com";

SmtpMail.Send(myMessage);

Tuy nhiên, có một vài vấn đề khi sử dụng lớp SmtpMail để gửi một thông điệp e-mail Lớp này

cần một SMTP-server cục bộ hay một relay-server trên mạng Ngoài ra, lớp SmtpMail không

hỗ trợ việc xác thực, do đó, nếu SMTP-server yêu cầu username và password, bạn sẽ không

thể gửi bất kỳ mail nào Để khắc phục vấn đề này, bạn có thể trực tiếp sử dụng thành phần

CDOSYS thông qua COM Interop (giả sử bạn có phiên bản server của Windows hay Microsoft Exchange).

Nhớ rằng, giao thức SMTP không được sử dụng để lấy e-mail Đối với công việc

này, bạn cần giao thức POP3 hay IMAP, cả hai giao thức này đều không có trong NET Framework.

Để có thêm thông tin về cách sử dụng và cấu hình SMTP-server, bạn hãy tham khảo các quyển sách chuyên về IIS.

15. G i và nh n e-mail v i MAPI G i và nh n e-mail v i MAPI ử ử ậ ậ ớ ớ

Bạn muốn gửi một thông điệp e-mail, nhưng SMTP-server (Simple Mail Transfer

Protocol server) chưa được cấu hình trên máy tính.

Sử dụng Simple MAPI (Messaging Application Programming Interface) bằng

cách nhập hàm cần thiết từ thư viện hệ thống không-được-quản-lý Mapi32.dll.

MAPI là giao diện cho phép bạn tương tác với các tính năng mailing được tích hợp trong hệ

điều hành Windows Bạn có thể sử dụng MAPI (thông qua các hàm API không-được-quản-lý, hoặc thông qua thành phần MAPI đi cùng với Visual Studio 6) để tương tác với mail-client mặc định (thường là Microsoft Outlook hay Outlook Express) Các tác vụ bao gồm: lấy thông tin contact từ sổ địa chỉ, lấy thông điệp trong Inbox, soạn và gửi thông điệp Đáng tiếc, không

có lớp nào sử dụng MAPI trong NET Framework Tuy nhiên, bạn có thể sử dụng thư viện không-được-quản-lý Mapi32.dll.

Thách thức chính khi sử dụng Simple MAPI trong NET là marshal các cấu trúc được sử dụng trong NET thành các cấu trúc mà Simple MAPI cần, sau đó marshal các cấu trúc do Simple

MAPI trả về cho ứng dụng NET Đây không phải là một công việc đơn giản Tuy nhiên, Microsoft cung cấp một giải pháp toàn vẹn trong một thành phần C# tổng quát (có thể tải miễn

phí) Bạn có thể sử dụng hai dự án dưới đây:

Một thành phần thư viện lớp (Class Library Component) bọc lấy các hàm Simple MAPI

và làm cho chúng có hiệu lực thông qua các phương thức của lớp

• Một chương trình (thử nghiệm) sử dụng thành phần này để đăng nhập, đăng xuất, đọc mail, gửi mail

Mã lệnh của cả hai dự án này không mấy phức tạp, nhưng rất dài nên không trình bày ở đây (bạn hãy xem trong đĩa CD đính kèm)

Đối với một ví dụ phức tạp hơn (xây dựng trên thư viện Simple MAPI của

Microsoft để tạo một ứng dụng Windows Form), một dự án C# mẫu (có thể tải

Trang 2

Chương 11: Lập trình mạng

miễn phí) được Thomas Scheidegger cung cấp tại [ http://www.codeproject.com/ csharp/simplemapidotnet.asp ].

Trang 3

473 Chương 11: Lập trình mạng

Trang 4

474

Chương 12:DỊCH VỤ WEB XML VÀ REMOTING

Trang 5

475

Trang 6

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

icrosoft .NET Framework hỗ trợ hai mô hình lập trình phân tán cấp cao là Remoting và dịch vụ Web XML Mặc dù cả hai công nghệ này có nhiều điểm

tương đồng (ví dụ, cả hai cùng trừu tượng hóa lời gọi giữa các tiến trình hay giữa các máy tính khác nhau thành lời gọi phương thức của các đối tượng ở xa), nhưng chúng cũng

có vài điểm khác nhau cơ bản

M

Dịch vụ Web XML được xây dựng bằng các chuẩn xuyên-nền và dựa vào khái niệm XML

messaging Dịch vụ Web XML được thực thi bởi bộ thực thi ASP.NET; nghĩa là chúng có được

các tính năng của ASP.NET như output-caching Điều này cũng có nghĩa là dịch vụ Web XML thuộc dạng phi trạng thái (stateless) Nói chung, dịch vụ Web XML thích hợp nhất khi bạn cần xuyên biên nền (ví dụ, một Java-client gọi một dịch vụ Web ASP.NET) hay biên tin cậy (ví

dụ, trong các phiên giao dịch thương mại) Trong chương này, chúng ta sẽ bàn một số mục

liên quan đến dịch vụ Web XML sau:

 Nâng cao tính linh hoạt của các lớp proxy bằng cách không viết mã cứng cho địa chỉ

của dịch vụ Web XML (mục 12.1).

 Sử dụng kỹ thuật caching để nâng cao hiệu năng và khả năng phục vụ (tính quy mô)

của dịch vụ Web XML (mục 12.2 và 12.3).

Tạo phương thức giao dịch cho dịch vụ Web XML (mục 12.4).

Truyền thông tin xác thực cho một dịch vụ Web XML bằng proxy (mục 12.5).

Gọi bất đồng bộ một phương thức của dịch vụ Web XML (mục 12.6).

Remoting là một công nghệ đặc trưng của NET dành cho các đối tượng phân tán và được xem

như là một hậu duệ của công nghệ DCOM Công nghệ này lý tưởng cho các hệ thống

in-house4; trong đó, tất cả các ứng dụng đều được xây dựng trên nền NET, chẳng hạn backbone của một hệ thống xử lý hóa đơn Remoting cho phép các chuẩn giao tiếp khác nhau, chẳng hạn các thông điệp nhị phân nhỏ gọn và các kết nối TCP/IP hiệu quả hơn mà dịch vụ Web XML không hỗ trợ Ngoài ra, Remoting còn là công nghệ duy nhất hỗ trợ các đối tượng có trạng

thái, và giao tiếp hai chiều thông qua callback Nó cũng là công nghệ duy nhất cho phép gởi

các đối tượng NET tùy biến qua mạng Trong chương này, chúng ta sẽ bàn một số mục liên quan đến Remoting sau:

Tạo các đối tượng khả-truy-xuất-từ-xa; đăng ký và quản lý chúng trên IIS (mục 12.7,

12.8, và 12.9)

 Phát sinh sự kiện trên các kênh truy xuất từ xa (mục 12.10)

 Kiểm soát thời gian sống và phiên bản của các đối tượng khả-truy-xuất-từ-xa (mục 12.11 và 12.12)

 Hiện thực các phương thức một chiều trong các đối tượng khả-truy-xuất-từ-xa (mục 12.13)

4 in-house system: Hệ thống công nghệ thông tin do phòng IT của một công ty xây dựng nên.

Trang 7

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

Chương này chỉ đưa ra một số kỹ thuật hữu dụng trong việc sử dụng dịch vụ

Web XML và Remoting Để hiểu sâu hơn, bạn cần tham khảo các sách chuyên về

đề tài này.

1. Tránh vi t mã c ng cho đ a ch URL c a d ch v Web Tránh vi t mã c ng cho đ a ch URL c a d ch v Web ế ế ứ ứ ị ị ỉ ỉ ủ ị ủ ị ụ ụ XML

Bạn cần sử dụng một dịch vụ Web XML được đặt tại một địa chỉ URL mà địa chỉ

này có thể thay đổi sau khi bạn triển khai ứng dụng client.

Sử dụng địa chỉ URL động cho dịch vụ Web XML Khi đó, địa chỉ động này được

lấy một cách tự động từ file cấu hình của ứng dụng client Trong Microsoft

Visual Studio NET, bạn có thể cấu hình địa chỉ URL động bằng cách thay đổi

tùy chọn URL Behavior của Web Reference Bạn cũng có thể sử dụng công cụ

Web Services Description Language (Wsdl.exe) với đối số /appsettingurlkey.

Theo mặc định, khi bạn tạo một lớp proxy thì địa chỉ URL của dịch vụ Web XML là mã cứng

trong phương thức khởi dựng của lớp proxy này Bạn có thể chép đè thiết lập này trong mã lệnh bằng cách điều chỉnh thuộc tính Url của lớp proxy sau khi tạo một thể hiện của nó Tuy

nhiên, có một tùy chọn khác: cấu hình cho lớp proxy sử dụng một địa chỉ URL động.

Trong Visual Studio NET, bạn có thể thực hiện điều này bằng cách chọn Web Reference trong cửa sổ Solution Explorer và thay đổi tùy chọn URL Behavior trong cửa sổ Properties (xem

hình 12.1)

Hình 12.1 Cấu hình địa chỉ URL cho dịch vụ Web XML

Sau khi bạn thay đổi như trên, địa chỉ URL của dịch vụ Web XML sẽ tự động được thêm vào file cấu hình của ứng dụng client File cấu hình này có tên là Web.config đối với các ứng dụng

Web, và [AppName].exe.config đối với các ứng dụng khác (lưu ý, nguồn xuất hiện trong môi

trường thiết kế chỉ là App.config, nhưng sau đó sẽ được Visual Studio NET đổi tên một cách

tự động) Ví dụ dưới đây là thiết lập được sinh tự động trong file cấu hình:

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

Trang 8

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

<configuration>

<appSettings>

<add key="AppName.ServerName.ServiceName"

value="http://localhost/WebServices/MyService.asmx"/>

</appSettings>

</configuration>

Bạn cũng có thể sử dụng địa chỉ URL động do công cụ Wsdl.exe sinh ra Trong trường hợp

này, bạn sử dụng đối số /appsettingurlkey để cho biết tên của thiết lập cấu hình mà URL sẽ

được lưu trữ ở đó Bạn phải tạo file cấu hình bằng tay

wsdl /out:Proxy.cs http://localhost/WebServices/MyService.asmx?WSDL

/appsettingurlkey:MyService

Trong cả hai trường hợp, mã lệnh của lớp proxy sẽ được sửa đổi để đọc địa chỉ URL từ file cấu hình Nếu không tìm thấy giá trị cần thiết, nó sẽ mặc định sử dụng địa chỉ URL được sử dụng trong quá trình phát triển ứng dụng Cách tiếp cận này cho phép bạn đổi địa chỉ URL của dịch vụ Web XML sau khi đã biên dịch và triển khai ứng dụng (chỉ cần thay đổi file cấu hình).

2. S d ng k thu t response-caching trong d ch v Web S d ng k thu t response-caching trong d ch v Web ử ụ ử ụ ỹ ỹ ậ ậ ị ị ụ ụ XML

Bạn muốn nâng cao hiệu năng của dịch vụ Web XML bằng cách lưu trữ giá trị

trả về của một phương thức web.

Sử dụng response-caching bằng cách thiết lập thuộc tính CacheDuration của đặc

tính System.Web.Services.WebMethod.

Trong ASP.NET, dịch vụ Web XML hỗ trợ response-caching giống hệt như các trang web

ASP.NET Khi response-caching được kích hoạt, mã lệnh của bạn chỉ thực hiện một lần, và giá

trị trả về của phương thức web sẽ được lưu lại và được trả về trong các lần gọi tiếp theo Đối

với Web Form, caching được thực hiện cho từng form Đối với dịch vụ Web XML, caching

được kích hoạt và cấu hình riêng cho mỗi phương thức web

Ví dụ, phương thức web dưới đây trả về giá trị ngày giờ hiện hành trên máy server Thông tin này được lưu lại trong một phút, nghĩa là các lời yêu cầu tiếp theo trong khoảng thời gian này

sẽ nhận lại thông tin đã được lưu trước đó

Using System;

using System.Web.Services;

public class ResponseCaching {

[WebMethod(CacheDuration=60)]

Trang 9

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

public string GetDate() {

return DateTime.Now.ToString();

}

}

Nếu phương thức web của bạn nhận nhiều đối số, ASP.NET sẽ sử dụng lại giá trị đã được lưu

chỉ khi các giá trị đối số cũng giống như thế Nếu bạn có một phương thức nhận tầm giá trị rộng thì caching trở nên không hiệu quả và đôi khi trở nên lãng phí, vì có quá nhiều thông tin cần được lưu nhưng ít khi được sử dụng lại Ví dụ, sử dụng caching trong một phương thức web thực hiện phép tính dựa trên đầu vào dạng số không phải là một sự lựa chọn tốt Trái lại,

sử dụng caching trong một phương thức web nhận giá trị ID của một nhóm nhỏ sản phẩm

chắc chắn là một sự lựa chọn tốt Bao giờ cũng vậy, response-caching bỏ qua mã lệnh của bạn, khiến nó trở nên không đủ tư cách nếu phương thức web của bạn cần thực hiện các hành động khác (chẳng hạn ghi nhật ký), hay phương thức web của bạn phụ thuộc vào một số thông tin khác ngoài các đối số được đưa vào (chẳng hạn thông tin xác thực của người dùng hay dữ liệu trong phiên làm việc)

Một hạn chế của response-caching là nó chỉ cho phép bạn sử dụng lại dữ liệu

trong phạm vi của một phương thức web Nếu bạn muốn sử dụng lại dữ liệu trong nhiều phương thức web khác nhau, kỹ thuật data-caching sẽ hiệu quả hơn.

3. S d ng k thu t data-caching trong d ch v Web XML S d ng k thu t data-caching trong d ch v Web XML ử ụ ử ụ ỹ ỹ ậ ậ ị ị ụ ụ

Bạn cần chạy phương thức web của bạn nhưng vẫn sử dụng một số thông tin đã

được lưu Hoặc, bạn muốn nâng cao hiệu năng của dịch vụ Web XML bằng cách

lưu trữ một số dữ liệu, và cần sử dụng lại dữ liệu này trong một số phương thức.

Bạn có thể lưu bất cứ đối tượng nào vào cache bằng phương thức Insert của đối

tượng System.Web.Caching.Cache Bạn có thể truy xuất cache thông qua thuộc tính tĩnh HttpContext.Current.

Cách thức làm việc của data-caching với một dịch vụ Web XML cũng giống như với một trang

web Bạn có thể lưu trữ dữ liệu vào cache bằng mã trang web và lấy nó về trong một dịch vụ

Web XML, hay ngược lại Để có thêm thông tin về data-caching và các kiểu chính sách hết

hiệu lực (expiration policy) mà nó hỗ trợ, bạn hãy tham khảo mục 7.15.

Điểm khác biệt duy nhất giữa caching trong một dịch vụ Web XML và caching trong một trang web là: Trong dịch vụ Web XML, bạn không thể thu lấy đối tượng Cache như một thuộc tính nội tại; thay vào đó, bạn cần truy xuất cache thông qua thuộc tính tĩnh

HttpContext.Current

Ví dụ dưới đây trình bày một dịch vụ Web XML với hai phương thức web:

• GetProductCatalog: Trả về một DataSet với các thông tin về sản phẩm DataSet này có thể được lấy từ cache hoặc được sinh tự động (nếu cần) bằng hàm GetCustomerDataSet

• GetProductList: Cũng sử dụng DataSet và hàm GetCustomerDataSet nhưng chỉ lấy một phần thông tin (tên sản phẩm)

Trang 10

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

Cả hai phương thức web trên đều có thể sử dụng chung dữ liệu đã được lưu, điều này làm giảm nhẹ gánh nặng đặt lên cơ sở dữ liệu

using System;

using System.Data;

using System.Data.SqlClient;

using System.Web.Services;

using System.Web;

public class DataCachingTest {

private static string connectionString = "Data Source=localhost;" +

"Initial Catalog=Northwind;user ID=sa";

[WebMethod()]

public DataSet GetProductCatalog() {

// Trả về DataSet (từ cache, nếu có thể).

return GetCustomerDataSet();

}

[WebMethod()]

public string[] GetProductList() {

// Truy xuất bảng khách hàng (từ cache, nếu có thể).

DataTable dt = GetCustomerDataSet().Tables[0];

// Tạo mảng chứa tên khách hàng

string[] names = new string[dt.Rows.Count];

// Đổ dữ liệu vào mảng.

int i = 0;

foreach (DataRow row in dt.Rows) {

names[i] = row["ProductName"].ToString();

i += 1;

}

Ngày đăng: 08/07/2014, 17:20

HÌNH ẢNH LIÊN QUAN

Hình 12.1 Cấu hình địa chỉ URL cho dịch vụ Web XML - Các giải pháp lập trình CSharp- P59 pps
Hình 12.1 Cấu hình địa chỉ URL cho dịch vụ Web XML (Trang 7)

TỪ KHÓA LIÊN QUAN