一步一步學Silverlight 2系列(33):Silverlight 2應用Web Service兩例

來源:互聯網
上載者:User
概述

我們知道,在Silverlight 2中提供了豐富的網路通訊API,包括支援SOAP服務、REST服務、基於HTTP通訊、Socket通訊等。本文我將通過幾個樣本來示範如何在Silverlight 2中應用Web Service實現檔案上傳和電子郵件發送。

使用Web Service上傳檔案

我將通過一個樣本來展示如何使用Web Service向伺服器上傳檔案,首先建立Silverlight項目,並在Web測試專案中添加一個ASP.NET Web Service檔案。現在來實現相關的WebMethod,在此方法中,將會接收兩個參數:位元組數組和副檔名,並會在伺服器上建立檔案,如下代碼所示:

public class FileService : WebService{    [WebMethod]    public int UploadFile(byte[] FileByte, String FileExtention)    {        FileStream stream = new FileStream(String.Format(@"D:\example.{0}", FileExtention),FileMode.CreateNew);        stream.Write(FileByte, 0, FileByte.Length);        stream.Close();        return FileByte.Length;    }}

添加一個簡單的介面,供使用者選擇本地檔案,我們將在按鈕單擊單擊事件中調用Web Service,如下代碼所示:

<Canvas Background="#FF333333">    <TextBox x:Name="txtFile" Height="30" Width="300" Canvas.Top="120"             Canvas.Left="30" Style="{StaticResource textBoxStyle}"></TextBox>    <Button x:Name="btnUpload" Width="60" Content="上 傳" Height="30"             Canvas.Left="340" Canvas.Top="120" Style="{StaticResource buttonStyle}"             Click="OnUploadClick"></Button>    <TextBlock x:Name="tblStatus" Canvas.Left="30" Canvas.Top="160"               FontSize="14" Foreground="White" Text=""></TextBlock></Canvas>

調用Web Service上傳檔案,此處使用了OpenFileDialog對象彈出擇視窗以便選擇檔案,此對象將選擇的檔案作為Stream返回,我們把Stream轉換為一個位元組資料傳遞給Web Service,如下代碼所示:

void OnUploadClick(object sender, RoutedEventArgs e){    OpenFileDialog openFile = new OpenFileDialog();     if (openFile.ShowDialog() == DialogResult.OK)       {        String fileName = openFile.SelectedFile.Name;        FileServiceSoapClient client = new FileServiceSoapClient();        client.UploadFileCompleted += new EventHandler<UploadFileCompletedEventArgs>(OnUploadFileCompleted);        Stream stream = (Stream)openFile.SelectedFile.OpenRead();        stream.Position = 0;        byte[] buffer = new byte[stream.Length + 1];        stream.Read(buffer, 0, buffer.Length);        String fileExtention = fileName.Substring(fileName.IndexOf('.') + 1);        client.UploadFileAsync(buffer, fileExtention);    }   }void OnUploadFileCompleted(object sender, UploadFileCompletedEventArgs e){    if (e.Error == null)    {        tblStatus.Text = "上傳檔案成功!";    }}

運行程式後,選擇一個檔案並上傳,如所示:

至此,我們就完成了一個使用Web Service上傳檔案的樣本。

使用Web Service寄送電子郵件

眾所周知,寄送電子郵件需要使用SMTP協議,Silverlight中並不支援SMTP通訊,但是我們可以藉助於Web Service來寄送電子郵件。本節將通過一個樣本講解這一內容,最終完成的效果如所示:

我們首先添加一個ASP.NET Web Service,並實現WebMethod,此方法將接受四個參數:寄件者、收件者、郵件主題以及郵件內容,並使用SmtpClient對象發送郵件,關於SmtpClient的使用,大家可以參考MSDN,它位於System.Net.Mail命名空間下。如下代碼所示:

public class EmailService : WebService{    [WebMethod]    public bool Send(String fromAddress,String toAddress,String subject,String body)    {        try        {            MailMessage msg = new MailMessage();            msg.From = new MailAddress(fromAddress);            msg.To.Add(new MailAddress(toAddress));            msg.Subject = subject;            msg.Body = body;            msg.IsBodyHtml = false;            SmtpClient smtp = new SmtpClient();            smtp.EnableSsl = true;            smtp.Send(msg);            return true;        }        catch        {            return false;        }       }}

使用SmtpClient需要在Web.config檔案中配置一下郵件伺服器,這裡使用Google的伺服器,大家可以使用自己的Gmail帳號,如下代碼所示:

<system.net>  <mailSettings>    <smtp>      <network host="smtp.gmail.com" port="587" userName="terrylee1218@gmail.com" password="password"/>    </smtp>  </mailSettings></system.net>

在瀏覽器中測試Web Service,確保它可以正確的發送郵件。編寫一個簡單使用者介面,如下代碼所示:

<Grid x:Name="LayoutRoot" Background="#333333">    <Grid.RowDefinitions>        <RowDefinition Height="70"></RowDefinition>        <RowDefinition Height="50"></RowDefinition>        <RowDefinition Height="50"></RowDefinition>        <RowDefinition Height="200"></RowDefinition>        <RowDefinition Height="50"></RowDefinition>    </Grid.RowDefinitions>    <Grid.ColumnDefinitions>        <ColumnDefinition Width="100"></ColumnDefinition>        <ColumnDefinition Width="*"></ColumnDefinition>    </Grid.ColumnDefinitions>    <local:TitleControl Grid.Row="0" Margin="8,8,8,8" Grid.ColumnSpan="2"></local:TitleControl>    <TextBlock Text="收件者" Grid.Row="1" Style="{StaticResource textBlockStyle}"></TextBlock>    <TextBlock Text="主 題" Grid.Row="2" Style="{StaticResource textBlockStyle}"></TextBlock>    <TextBox x:Name="txtToEmailAddress" Grid.Row="1" Grid.Column="1" Width="440" Height="30" HorizontalAlignment="Left"></TextBox>    <TextBox x:Name="txtSubject" Grid.Row="2" Grid.Column="1" Width="440" Height="30" HorizontalAlignment="Left"></TextBox>    <TextBox x:Name="txtBody" Grid.Row="3" Grid.ColumnSpan="2" Width="500" HorizontalAlignment="Left" Height="200" Margin="100 0 0 0"></TextBox>    <Button x:Name="btnSend" Grid.Row="4" Grid.Column="1" HorizontalAlignment="Left" Content="發 送"            Style="{StaticResource buttonStyle}" Width="120" Height="30"            Click="OnSendClick"></Button>  </Grid>

在Silverlight項目中添加Web Service引用,並編寫代碼來調用Web Service,相信大家都已經熟悉了該如何調用,如下代碼所示:

void OnSendClick(object sender, RoutedEventArgs e){    // 發送郵件地址    String fromAddress = "terrylee1218@gmail.com";    EmailServiceSoapClient client = new EmailServiceSoapClient();    client.SendCompleted += new EventHandler<SendCompletedEventArgs>(OnSendCompleted);    client.SendAsync(fromAddress,                     this.txtToEmailAddress.Text,                     this.txtSubject.Text,                     this.txtBody.Text);}void OnSendCompleted(object sender, SendCompletedEventArgs e){    if (e.Result)    {        HtmlPage.Window.Alert("發送郵件成功!");    }    else    {        HtmlPage.Window.Alert("發送郵件成功!");    }}

運行後輸入相關資訊,並發送郵件,如所示:

至此我們就完成一個在Silverlight中寄送電子郵件的樣本,大家如果有興趣,還可以為其加上更加豐富的功能,如添加抄送人、密送人以及附件等。

本文首發IT168:http://tech.it168.com/msoft/2008-05-30/200805301124268.shtml

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.