#眉標=.NET Namespace專欄 #副標= System.NET #大標=要求─回應模式的通訊作業 #作者=文/彭靖灝 #引言=對於大多數的通訊作業而言,要求─回應的作業模式應該是很常見的應用。在System.Net命名空間中,微軟提供了一組處理這類作業模式的類別:WebResponse和WebRequest。 #內文= =========程式========= Dim request As WebRequest = WebRequest.Create("http://www.flag.com.tw") =========程式========= =========程式========= 程式1 透過WebRequest和WebResponse進行存取 Imports System.Net Imports System.Text Imports System.IO … Private Sub btnGO_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles btnGO.Click StatusStrip1.Text = "Creating Request..." Dim request As WebRequest = _ WebRequest.Create(txtURI.Text) ' 準備身份資訊. StatusStrip1.Text = "Preparing Credential..." request.Credentials = CredentialCache.DefaultCredentials ' 取得回應 StatusStrip1.Text = "Waiting for Response..." Dim response As WebResponse = _ request.GetResponse() ' 顯示狀態 Dim strResult As New StringBuilder StatusStrip1.Text = "Request Success! Preparing for content..." strResult.Append _ ("Status:" & response.StatusDescription & vbNewLine) ' 取得內容串流 Dim dataStream As Stream = response.GetResponseStream() ' 安排串流內容 Dim myEncoding As Encoding = Encoding.GetEncoding(950) Dim reader As New StreamReader(dataStream, myEncoding) ' 讀取內容 Dim responseFromServer As String = reader.ReadToEnd() ' 顯示內容 strResult.Append(responseFromServer) txtResponse.Text = strResult.ToString ' 清除串流及物件 reader.Close() dataStream.Close() response.Close() End Sub =========程式========= =========程式========= 程式2 ' 取得回應 Dim response As HttpWebResponse = _ CType(request.GetResponse(), HttpWebResponse) ' 顯示狀態 Dim strResult As New StringBuilder strResult.Append("Status:" & _ response.StatusDescription & vbNewLine) =========程式========= =========程式========= 程式3 Dim request As HttpWebRequest = _ WebRequest.Create(myUri) request.Accept = "image/*" =========程式========= =========程式========= 程式4 Public Class State Public Request As HttpWebRequest Public Sub New() Request = Nothing End Sub End Class =========程式========= =========程式========= 程式5 Private Sub btnGO_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles btnGO.Click Dim request As HttpWebRequest = _ WebRequest.Create(txtURL.Text) Dim myState As New State myState.Request = request request.BeginGetResponse( New AsyncCallback _ (AddressOf ReceiveResponse), myState) End Sub =========程式========= =========程式========= 程式6 Private Sub ReceiveResponse(ByVal request As IAsyncResult) Dim myState As State = CType(request.AsyncState, State) Dim HttpRequest As HttpWebRequest = myState.Request Dim response As HttpWebResponse = _ HttpRequest.EndGetResponse(request) … Display(strResult.ToString) End Sub =========程式========= =========程式========= 程式7 Dim myCache As New CredentialCache() myCache.Add(New Uri("http://www.mysite.com/"), "Basic", _ New NetworkCredential(UserName, SecurelyStoredPassword)) myCache.Add(New Uri("http://www.mysite.com/"), "Digest", _ New NetworkCredential(UserName, _ SecurelyStoredPassword, Domain)) =========程式========= =========程式========= 程式8 Dim myCredential As NetworkCredential = _ myCache.GetCredential(New Uri(txtURI.Text), "Basic") request.Credentials = myCredential =========程式========= =========程式========= 程式9 處理WebException Try … Catch ex As WebException Dim StatusDesc As String If ex.Status = WebExceptionStatus.ProtocolError Then txtResponse.Text = "Error:" & ex.Message & _ vbNewLine & "Status Code:" & _ CType(ex.Response, HttpWebResponse).StatusCode & _ vbNewLine & "Status Description:" & _ CType(ex.Response, HttpWebResponse).StatusDescription Else StatusDesc = _ WebExceptionStatus.GetName( _ GetType(WebExceptionStatus), ex.Status) txtResponse.Text = "Error:" & ex.Message & _ vbNewLine & "Status Description:" & StatusDesc End If End Try =========程式========= =========程式========= Dim client As New WebClient Dim myCredential As New NetworkCredential("anonymous", "") client.Credentials = myCredential client.DownloadFile("ftp://localhost/myFile.txt", _ "C:\My Documents\myFile.txt") =========程式========= =========程式========= Dim uri As String = "ftp://localhost/myFile.txt" Dim request As FtpWebRequest = _ CType(WebRequest.Create(uri), FtpWebRequest) request.Method = WebRequestMethods.Ftp.DeleteFile Dim response As FtpWebResponse = _ CType(request.GetResponse(), FtpWebResponse) =========程式========= =========程式========= 程式10 Private Sub btnSend_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles btnSend.Click Dim Msg As New MailMessage With Msg .To = txtTo.Text .Subject = txtSubject.Text .Body = txtSubject.Text End With Try SmtpMail.SmtpServer = "localhost" SmtpMail.Send(Msg) MessageBox.Show("Mail sent.") Catch ex As Exception MessageBox.Show(ex.Message) End Try End Sub =========程式========= =========程式========= 程式11 Dim Msg As System.Net.Mail.MailMessage Dim SendFrom, SendTo As MailAddress Dim Client As New SmtpClient SendFrom = New MailAddress("administrator@mysite.com") SendTo = New MailAddress(txtTo.Text) Msg = New System.Net.Mail.MailMessage(SendFrom, SendTo) With Msg .Subject = txtSubject.Text .Body = txtBody.Text End With Client.Host = "localhost" Try Client.Send(Msg) MessageBox.Show("Mail sent!") Catch ex As SmtpException MessageBox.Show(ex.Message) End Try =========程式=========