Silverlight中调用WebService-发送邮件测试实例
Silverlight能夠構(gòu)建強(qiáng)大的企業(yè)級(jí)應(yīng)用程序,關(guān)鍵和Silverlight2.0強(qiáng)大數(shù)據(jù)通信是分不開(kāi)的,包括SOAP服務(wù)的訪問(wèn),RESTful服務(wù)的訪問(wèn),以及基于Http協(xié)議和Socket通信等。在Silverlight中一些基本的功能都適用于Http和Https通信。
其中主要特點(diǎn):
???? A:始終允許同域調(diào)用
???? B:如果正確配置負(fù)載有Web服務(wù)的Web服務(wù)器,可以跨域訪問(wèn)
???? C:僅僅支持Get和Post謂詞
???? D:所有請(qǐng)求都是異步的-這也是SL用戶體驗(yàn)最為吸引人一個(gè)特點(diǎn)
???? E:只有"00確定"和"404為找到"狀態(tài)可用
我們看到B支持跨域訪問(wèn),Silverlight默認(rèn)情況是請(qǐng)求的URL進(jìn)行嚴(yán)格限制的,只允許訪問(wèn)同一子目錄下的URL資源。禁止跨域訪問(wèn)的,例如當(dāng)前我們?cè)诒镜氐腤eb程序中引用新浪網(wǎng)提供天氣預(yù)報(bào)服務(wù)http://sina.com/service.asmx,默認(rèn)情況下會(huì)拋出一個(gè)異常.
這個(gè)異常拋出的主要原因是在完成事件Complete引用的參數(shù)為空,解決方案:在需要被訪問(wèn)的站點(diǎn)根目錄下添加兩個(gè)策略文件-兩個(gè)XML文件clientaccesspolicy.xml,crossdomain.xml即可,注意兩個(gè)XML文件最好使用默認(rèn)的UTF-8編碼格式,如果修改在程序中極易出現(xiàn)錯(cuò)誤,且不容易發(fā)現(xiàn).主要是因?yàn)檎?qǐng)求都是異步的發(fā)送客戶端的數(shù)據(jù)格式XML編碼就是UTF-8格式。
這是昨天遇到一個(gè)問(wèn)題,下面做一個(gè)簡(jiǎn)單的在Silverlight程序中調(diào)用本地WebService(非跨域)實(shí)例.
(1)創(chuàng)建WebService并實(shí)現(xiàn)WebService:-
Code?1???????//WebService訪問(wèn)數(shù)據(jù)
?2???????[WebMethod]
?3????????public?List<BookEnticy>?GetAllBookEnticy()
?4????????{
?5????????????List<BookEnticy>?getBooklist?=?new?List<BookEnticy>?{
?6?????????????new?BookEnticy{BookId=120,BookName="我的非正常生活!"},
?7?????????????new?BookEnticy{BookId=121,BookName="中央警備司令部"},
?8?????????????new?BookEnticy{BookId=122,BookName="警戒線"}
?9
10????????????};
11????????????//導(dǎo)入System.Data.Linq?空間
12????????????IDbConnection?getcon?=?new?SqlConnection????????????("server=local;database=TestLinq;uid=sa;pwd=sa");
13????????????DataContext?getcontent?=?new?DataContext(getcon);
14
15????????????GetServerClintDataWS?newdata?=?new?GetServerClintDataWS();
16????????????List<string>?getlist=from?getlistinfo?in?newdata.GetAllBookEnticy()
17?????????????????????????????????????????select?getlistinfo.BookName;
18????????????return?getBooklist;
19????????}
(2)Silverlight中引用并調(diào)用
選中SL項(xiàng)目右擊彈出的菜單選擇? 添加服務(wù)引用,SL應(yīng)用程序中會(huì)自動(dòng)生成一個(gè)文件夾
當(dāng)添加引用后,自動(dòng)添加SL程序中對(duì)應(yīng)該服務(wù)的本地代理類 ,代理類是基于System.ServiceModel空間種ClintBase構(gòu)建的,另外一個(gè)配置文件ServiceReferences.ClintConfig是客戶端配置文件,用來(lái)配置訪問(wèn)服務(wù)地址,綁定契約等信息
Silverlight只支持異步調(diào)用,調(diào)用完成獎(jiǎng)觸發(fā)一個(gè)Complete事件,最終將在OnComplete事件中進(jìn)行數(shù)據(jù)綁定
根據(jù)上面步驟用Silverlight簡(jiǎn)單發(fā)郵件功能:
A:創(chuàng)建WebService并實(shí)現(xiàn):核心代碼如下
Code???????[WebMethod]
????????/**////發(fā)送Email
????????///參數(shù):fromaddress-發(fā)件人???toaddress-收件人??標(biāo)題-title??content-內(nèi)容
????????public?bool?SendEmail(string?fromaddress,?string?toaddress,?string?title,?string?content)
????????{
????????????try
????????????{
????????????????MailMessage?newmail?=?new?MailMessage();
????????????????newmail.From?=?new?MailAddress(fromaddress);
????????????????newmail.To.Add(new?MailAddress(toaddress));//因?yàn)榭梢猿?對(duì)應(yīng)多人
????????????????newmail.Subject?=?title;
????????????????newmail.Body?=?content;
????????????????newmail.IsBodyHtml?=?false;
????????????????//use?SmtpClint?send?Email
????????????????SmtpClient?getclint?=?new?SmtpClient();
????????????????getclint.EnableSsl?=?true;
????????????????getclint.Send(newmail);
????????????????return?true;
????????????}
????????????catch?(Exception?se)
????????????{
????????????????return?false;
????????????}
????????????return?false;
????????}
在Asp.net實(shí)現(xiàn)發(fā)送郵件功能必須引用System.net.Mail空間,發(fā)送郵件細(xì)節(jié)請(qǐng)參考MSDN:http://msdn.microsoft.com/zh-cn/library/system.net.mail.mailmessage.aspx,WebService中發(fā)送郵件方法總共接受四個(gè)參數(shù):FromAddress-發(fā)件人? ToAddress-收件人? Title:標(biāo)題 Body:內(nèi)容,在建立WebService發(fā)送郵件自前需要建立一個(gè)郵件服務(wù)器,一般使用Gmail可以使用自己的賬號(hào),在根目錄Web.Config中配置,詳細(xì)代碼如下:
<!--配置郵件服務(wù)器?發(fā)送Emai?use?Gmail-->????<system.net>
????????<mailSettings>
????????????<smtp>
????????????????<network?host="smtp.gmail.com"?port="587"?userName="ChenkaiHome@gmail.com"?password=""?/>
????????????</smtp>
????????</mailSettings>
????</system.net>
配置完必須在Silverlight中添加服務(wù)引用
(2)Silverlight做前臺(tái)頁(yè)面:
效果圖-(簡(jiǎn)化版):
頁(yè)面Silverlight代碼:
Code?<Grid?x:Name="LayoutRoot"?Background="Bisque">
????????<Canvas>
????????????<Grid>
????????????????<Grid.RowDefinitions>
????????????????????<RowDefinition?Height="70"></RowDefinition>
????????????????????<RowDefinition?Height="70"></RowDefinition>
????????????????????<RowDefinition?Height="80"></RowDefinition>
????????????????????<RowDefinition?Height="*"></RowDefinition>
????????????????</Grid.RowDefinitions>
????????????????
????????????????<Grid.ColumnDefinitions>
????????????????????<ColumnDefinition?Width="80"></ColumnDefinition>
????????????????????<ColumnDefinition?Width="*"></ColumnDefinition>
????????????????</Grid.ColumnDefinitions>
????????????????<TextBlock?Text="收件人:"?Grid.Row="0"?Grid.Column="0"?TextAlignment="Center"?HorizontalAlignment="Center"?VerticalAlignment="Center"?FontSize="14"></TextBlock>
????????????????<TextBox?x:Name="address"?Grid.Row="0"?Grid.Column="1"?Height="40"?Width="250"?FontSize="14"?TextAlignment="Left"??HorizontalAlignment="Center"?VerticalAlignment="Center">?</TextBox>
????????????????<TextBlock?Text="標(biāo)??題:"?Grid.Row="1"?Grid.Column="0"??FontSize="14"?TextAlignment="Center"??HorizontalAlignment="Center"?VerticalAlignment="Center"></TextBlock>
????????????????<TextBox?x:Name="title"?Grid.Row="1"?Grid.Column="1"?Height="40"?Width="250"?FontSize="14"?TextAlignment="Left"?HorizontalAlignment="Center"?VerticalAlignment="Center"></TextBox>
????????????????<TextBlock?Text="內(nèi)??容:"?Grid.Row="2"?Grid.Column="0"??FontSize="14"??HorizontalAlignment="Center"?VerticalAlignment="Center"></TextBlock>
????????????????<TextBox?TextWrapping="Wrap"?x:Name="content"?Grid.Row="2"?Grid.Column="1"></TextBox>
????????????????<Button?Content="Send"?Grid.Row="3"?Grid.Column="0"??Height="45"??Click="Button_Click"></Button>
????????????</Grid>
????????</Canvas>
????</Grid>
當(dāng)點(diǎn)擊Send觸發(fā)事件后臺(tái)處理代碼:
Code??//send?Email
????????private?void?Button_Click(object?sender,?RoutedEventArgs?e)
????????{
????????????string?fromaddress?=?"dkjay@163.com";
????????????ServiceReference2.SendEmailTestSoapClient?getclint?=?new?TestWebServiceSL.ServiceReference2.SendEmailTestSoapClient();
????????????getclint.SendEmailCompleted?+=?new?EventHandler<TestWebServiceSL.ServiceReference2.SendEmailCompletedEventArgs>(getclint_SendEmailCompleted);
????????????
????????}
????????
????????void?getclint_SendEmailCompleted(object?sender,?TestWebServiceSL.ServiceReference2.SendEmailCompletedEventArgs?e)
????????{
????????????//判斷并提示
????????????if?(e.Error?!=?null)
????????????{
????????????????HtmlPage.Window.Alert("Send??Suceess!");
????????????}
????????????else
????????????{
????????????????HtmlPage.Window.Alert("Send?Faile!");
????????????}???
????????}
?
?
轉(zhuǎn)載于:https://www.cnblogs.com/chenkai/archive/2009/06/10/1500299.html
總結(jié)
以上是生活随笔為你收集整理的Silverlight中调用WebService-发送邮件测试实例的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: c#得到硬盘信息
- 下一篇: Opera 发布新技术 Opera Un