Windows Phone 7 网络编程之留言板应用

简介:

 这个简易的留言板,是通过手机客户端与web程序的交互来设计的,保存留言的时候将数据传输到web,显示留言的时候再从数据库取数通过web传输到客户端。加强对HttpWebRequest异步请求的学习。

 

 

 

 
  1. <phone:PhoneApplicationPage   
  2.     x:Class="WindowsPhoneLiuyan.MainPage" 
  3.     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
  4.     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
  5.     xmlns:phone="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone" 
  6.     xmlns:shell="clr-namespace:Microsoft.Phone.Shell;assembly=Microsoft.Phone" 
  7.     xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
  8.     xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
  9.     xmlns:Data="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Data" 
  10.     mc:Ignorable="d" d:DesignWidth="480" d:DesignHeight="768" 
  11.     FontFamily="{StaticResource PhoneFontFamilyNormal}" 
  12.     FontSize="{StaticResource PhoneFontSizeNormal}" 
  13.     Foreground="{StaticResource PhoneForegroundBrush}" 
  14.     SupportedOrientations="Portrait" Orientation="Portrait" 
  15.     shell:SystemTray.IsVisible="True"> 
  16.  
  17.     <!--LayoutRoot is the root grid where all page content is placed--> 
  18.     <Grid x:Name="LayoutRoot" Background="Transparent"> 
  19.         <Grid.RowDefinitions> 
  20.             <RowDefinition Height="Auto"/> 
  21.             <RowDefinition Height="*"/> 
  22.         </Grid.RowDefinitions> 
  23.  
  24.         <!--TitlePanel contains the name of the application and page title--> 
  25.         <StackPanel x:Name="TitlePanel" Grid.Row="0" Margin="12,17,0,28"> 
  26.             <TextBlock x:Name="PageTitle" Text="网络留言板" Margin="9,-7,0,0" Style="{StaticResource PhoneTextTitle1Style}"/> 
  27.         </StackPanel> 
  28.  
  29.         <!--ContentPanel - place additional content here--> 
  30.         <Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0"> 
  31.             <Canvas  Height="600" Margin="0,4,6,4"> 
  32.                 <TextBlock x:Name="name1" Canvas.Top="327" Canvas.Left="8" Text="网   名:" Foreground="#FFF7F6F6"/> 
  33.                 <TextBox x:Name="name" Width="122" Canvas.Left="86" Canvas.Top="308" Background="#FFFBF6F6"/> 
  34.                 <TextBlock x:Name="message1" Canvas.Left="11" Canvas.Top="360" Text="留 言:" Foreground="#FFFBF9F9"/> 
  35.                 <TextBox x:Name="message" Width="321" Canvas.Left="86" Canvas.Top="360" VerticalScrollBarVisibility="Hidden" Height="124"/> 
  36.                 <Button Canvas.Left="30" Canvas.Top="490" Content="保存" Height="71" Name="save" Width="160" Click="save_Click" /> 
  37.                 <Button Canvas.Left="217" Canvas.Top="490" Content="重置" Height="71" Name="reset" Width="160" Click="reset_Click" /> 
  38.                 <TextBox Canvas.Left="-4" Canvas.Top="6" Height="296" Name="messages" Text="TextBox" Width="460" AcceptsReturn="True" /> 
  39.             </Canvas> 
  40.         </Grid> 
  41.     </Grid> 
  42. </phone:PhoneApplicationPage> 

 

 
  1. using System;  
  2. using System.Collections.Generic;  
  3. using System.Linq;  
  4. using System.Net;  
  5. using System.Windows;  
  6. using System.Windows.Controls;  
  7. using System.Windows.Documents;  
  8. using System.Windows.Input;  
  9. using System.Windows.Media;  
  10. using System.Windows.Media.Animation;  
  11. using System.Windows.Shapes;  
  12. using Microsoft.Phone.Controls;  
  13. using System.Text;  
  14. using System.IO;  
  15. using System.Collections.ObjectModel;  
  16.  
  17. namespace WindowsPhoneLiuyan  
  18. {  
  19.     public partial class MainPage : PhoneApplicationPage  
  20.     {  
  21.         public MainPage()  
  22.         {  
  23.             InitializeComponent();  
  24.             getMessage();  
  25.         }  
  26.  
  27.         private void save_Click(object sender, RoutedEventArgs e)  
  28.         {  
  29.             UriBuilder fullUri = new UriBuilder("http://localhost/liuyan/messege.ashx");  
  30.             fullUri.Query = "type=insert&name=" + name.Text + "&description=" + message.Text;  
  31.             // 创建WebRequest  
  32.             HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create(fullUri.Uri);  
  33.             // 创建同步的AsyncRequest  
  34.             UpdateState State = new UpdateState();  
  35.             State.AsyncRequest = myRequest;  
  36.             // 开始异步请求  
  37.             myRequest.BeginGetResponse(new AsyncCallback(HandleMyResponse), State);  
  38.         }  
  39.  
  40.         public void getMessage()  
  41.         {  
  42.             UriBuilder fullUri = new UriBuilder("http://localhost/liuyan/messege.ashx");  
  43.             fullUri.Query = "type=get";  
  44.             // 创建WebRequest  
  45.             HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create(fullUri.Uri);  
  46.             // 创建同步的AsyncRequest  
  47.             UpdateState State = new UpdateState();  
  48.             State.AsyncRequest = myRequest;  
  49.             // 开始异步请求  
  50.             myRequest.BeginGetResponse(new AsyncCallback(HandleMyResponse), State);  
  51.         }  
  52.  
  53.         private void HandleMyResponse(IAsyncResult asyncResult)  
  54.         {  
  55.             // 获取返回的信息  
  56.             UpdateState myState = (UpdateState)asyncResult.AsyncState;  
  57.             HttpWebRequest myRequest = (HttpWebRequest)myState.AsyncRequest;  
  58.             //结束异步请求  
  59.             myState.AsyncResponse = (HttpWebResponse)myRequest.EndGetResponse(asyncResult);  
  60.             Stream streamResult = myState.AsyncResponse.GetResponseStream();  
  61.  
  62.             Deployment.Current.Dispatcher.BeginInvoke(() => 
  63.             {  
  64.                 if (streamResult.Length != 0)  
  65.                 {  
  66.                     StreamReader sr = new StreamReader(streamResult);  
  67.                     messages.Text = sr.ReadToEnd();  
  68.                 }  
  69.             });  
  70.         }  
  71.  
  72.         private void reset_Click(object sender, RoutedEventArgs e)  
  73.         {  
  74.             name.Text = "";  
  75.             message.Text = "";  
  76.         }  
  77.  
  78.     }  
  79.  
  80.     public class UpdateState  
  81.     {  
  82.         public HttpWebRequest AsyncRequest { get; set; }  
  83.         public HttpWebResponse AsyncResponse { get; set; }  
  84.     }  

web依然使用.NET

Message.ashx文件

 

 
  1. using System;  
  2. using System.Collections.Generic;  
  3. using System.Linq;  
  4. using System.Web;  
  5. using System.Data.OleDb;  
  6. using System.Data;  
  7.  
  8. namespace liuyan.Web  
  9. {  
  10.     /// <summary> 
  11.     /// Messege 的摘要说明  
  12.     /// </summary> 
  13.     public class Message : IHttpHandler  
  14.     {  
  15.  
  16.         public void ProcessRequest(HttpContext context)  
  17.         {  
  18.             context.Response.ContentType = "text/plain";  
  19.             string type = context.Request.QueryString["type"].ToString();  
  20.             switch (type)  
  21.             {  
  22.                 case "get":  
  23.                     get(context);  
  24.                     break;  
  25.                 case "insert":  
  26.                     insert(context);  
  27.                     break;  
  28.                 default:  
  29.                     break;  
  30.             }  
  31.         }  
  32.         /// <summary> 
  33.         /// 获取留言板数据  
  34.         /// </summary> 
  35.         /// <param name="context"></param> 
  36.         public void get(HttpContext context)  
  37.         {  
  38.             string messages = "";  
  39.             OleDbCommand cmd = new OleDbCommand();  
  40.             SQLExcute("SELECT * from about order by id desc", cmd);  
  41.             OleDbDataAdapter da = new OleDbDataAdapter();  
  42.             da.SelectCommand = cmd;  
  43.             DataSet ds = new DataSet();  
  44.             da.Fill(ds);  
  45.  
  46.             foreach (DataRow dr in ds.Tables[0].Rows)  
  47.             {  
  48.                 messages += dr[1] + " say:" + dr[2]+" ";  
  49.             }  
  50.  
  51.             context.Response.Write(messages.ToString());  
  52.         }  
  53.         /// <summary> 
  54.         /// 先往access数据库插入数据  然后再查询返回数据  
  55.         /// </summary> 
  56.         /// <param name="context"></param> 
  57.         public void insert(HttpContext context)  
  58.         {  
  59.             string name = context.Request.QueryString["name"].ToString();  
  60.             string description = context.Request.QueryString["description"].ToString();  
  61.             string sql = "insert into about(name,description) values('" + name + "','" + description + "')";  
  62.             SQLExcute(sql);  
  63.             string messages = "";  
  64.             OleDbCommand cmd = new OleDbCommand();  
  65.             SQLExcute("SELECT * from about order by id desc", cmd);  
  66.             OleDbDataAdapter da = new OleDbDataAdapter();  
  67.             da.SelectCommand = cmd;  
  68.             DataSet ds = new DataSet();  
  69.             da.Fill(ds);  
  70.  
  71.             foreach (DataRow dr in ds.Tables[0].Rows)  
  72.             {  
  73.                 messages += "("+dr[1]+")" + " say:" + dr[2];  
  74.             }  
  75.  
  76.             context.Response.Write(messages.ToString());  
  77.         }  
  78.         //SQL的操作     
  79.         private void SQLExcute(string SQLCmd)  
  80.         {  
  81.             string ConnectionString = "PROVIDER=Microsoft.Jet.OLEDB.4.0;DATA SOURCE=D:\\code\\Message\\App_Data\\information.mdb";  
  82.             OleDbConnection conn = new OleDbConnection(ConnectionString);  
  83.             conn.Open();  
  84.             OleDbCommand cmd = new OleDbCommand();  
  85.             cmd.Connection = conn;  
  86.             cmd.CommandTimeout = 15;  
  87.             cmd.CommandType = CommandType.Text;  
  88.             cmd.CommandText = SQLCmd;  
  89.             cmd.ExecuteNonQuery();  
  90.             conn.Close();  
  91.         }  
  92.         //SQL的操作 是SQLExcute的重构  
  93.         private void SQLExcute(string SQLCmd, OleDbCommand Cmd)  
  94.         {  
  95.             string ConnectionString = "PROVIDER=Microsoft.Jet.OLEDB.4.0;DATA SOURCE=D:\\code\\Message\\App_Data\\information.mdb";  
  96.             OleDbCommand cmd = new OleDbCommand();  
  97.             OleDbConnection Conn = new OleDbConnection(ConnectionString);  
  98.             Conn.Open();  
  99.             Cmd.Connection = Conn;  
  100.             Cmd.CommandTimeout = 15;  
  101.             Cmd.CommandType = CommandType.Text;  
  102.             Cmd.CommandText = SQLCmd;  
  103.             Cmd.ExecuteNonQuery();  
  104.             Conn.Close();  
  105.         }  
  106.         public bool IsReusable  
  107.         {  
  108.             get  
  109.             {  
  110.                 return false;  
  111.             }  
  112.         }  
  113.     }  

 



本文转自linzheng 51CTO博客,原文链接:http://blog.51cto.com/linzheng/1078692

相关文章
|
4天前
|
安全 网络安全 区块链
网络安全与信息安全:构建数字世界的防线在当今数字化时代,网络安全已成为维护个人隐私、企业机密和国家安全的重要屏障。随着网络攻击手段的不断升级,从社交工程到先进的持续性威胁(APT),我们必须采取更加严密的防护措施。本文将深入探讨网络安全漏洞的形成原因、加密技术的应用以及提高公众安全意识的重要性,旨在为读者提供一个全面的网络安全知识框架。
在这个数字信息日益膨胀的时代,网络安全问题成为了每一个网民不可忽视的重大议题。从个人信息泄露到企业数据被盗,再到国家安全受到威胁,网络安全漏洞如同隐藏在暗处的“黑洞”,时刻准备吞噬掉我们的信息安全。而加密技术作为守护网络安全的重要工具之一,其重要性不言而喻。同时,提高公众的安全意识,也是防范网络风险的关键所在。本文将从网络安全漏洞的定义及成因出发,解析当前主流的加密技术,并强调提升安全意识的必要性,为读者提供一份详尽的网络安全指南。
|
14天前
|
网络协议 安全 物联网
探索未来网络:IPv6的演进与应用
本文深入探讨了互联网协议第6版(IPv6)的发展历程、技术特点以及在各领域的应用前景。通过对IPv4面临的问题进行分析,阐明了IPv6出现的必要性及其在地址空间扩展、安全性提升和自动配置等方面的显著优势。结合当前技术趋势和应用案例,展望了IPv6在未来网络中的发展潜力,为相关领域的研究和实践提供了参考。
|
14天前
|
并行计算 安全 网络协议
探索未来网络:量子互联网的原理与应用
本文深入探讨了量子互联网的基本概念、技术原理及其潜在应用。通过对量子纠缠、量子叠加和量子隐形传态等核心概念的解释,文章展示了量子互联网如何利用量子力学特性来实现超高速、超高安全性的通信。此外,还讨论了量子互联网在金融、医疗、国防等领域的应用前景,以及当前面临的技术挑战和未来的发展方向。
|
19天前
|
机器学习/深度学习 人工智能 自然语言处理
深度学习中的卷积神经网络(CNN)及其应用
【9月更文挑战第24天】本文将深入探讨深度学习中的一种重要模型——卷积神经网络(CNN)。我们将通过简单的代码示例,了解CNN的工作原理和应用场景。无论你是初学者还是有经验的开发者,这篇文章都将为你提供有价值的信息。
49 1
|
2天前
|
存储 安全 算法
网络安全与信息安全:构建数字世界的防线在数字化浪潮席卷全球的今天,网络安全与信息安全已成为维系现代社会正常运转的关键支柱。本文旨在深入探讨网络安全漏洞的成因与影响,剖析加密技术的原理与应用,并强调提升公众安全意识的重要性。通过这些综合性的知识分享,我们期望为读者提供一个全面而深刻的网络安全视角,助力个人与企业在数字时代中稳健前行。
本文聚焦网络安全与信息安全领域,详细阐述了网络安全漏洞的潜在威胁、加密技术的强大防护作用以及安全意识培养的紧迫性。通过对真实案例的分析,文章揭示了网络攻击的多样性和复杂性,强调了构建全方位、多层次防御体系的必要性。同时,结合当前技术发展趋势,展望了未来网络安全领域的新挑战与新机遇,呼吁社会各界共同努力,共筑数字世界的安全防线。
|
2天前
|
存储 安全 自动驾驶
探索未来网络:量子互联网的原理与应用
【10月更文挑战第2天】 本文旨在探讨量子互联网的基本原理、技术实现及其在通讯领域的革命性应用前景。量子互联网利用量子力学原理,如量子叠加和量子纠缠,来传输信息,有望大幅提升通信的安全性和速度。通过详细阐述量子密钥分发(QKD)、量子纠缠交换和量子中继等关键技术,本文揭示了量子互联网对未来信息社会的潜在影响。
|
6天前
|
人工智能 安全 网络协议
探索未来网络:量子互联网的原理与应用
本文深入探讨了量子互联网的基础原理、关键技术及其在未来通信领域的应用前景。通过分析量子纠缠、量子叠加等核心概念,揭示了量子互联网相较于传统互联网的优势所在。同时,文章还讨论了当前量子互联网领域面临的技术挑战和解决方案,为读者呈现了一个关于量子互联网的全面且深入的视角。
|
14天前
|
网络协议 物联网 5G
探索未来网络:IPv6的演进与应用
本文深入探讨了互联网协议第六版(IPv6)的发展背景、技术特性及其在现代网络中的应用。通过分析IPv4面临的地址枯竭问题,阐述了IPv6作为解决方案的重要性和紧迫性。文章详细介绍了IPv6相较于IPv4的改进之处,如更大的地址空间、简化的包头格式、增强的组播支持等,并探讨了IPv6在实际部署中遇到的挑战及应对策略。通过对IPv6过渡技术和双栈技术的讨论,揭示了其在促进下一代互联网发展中的关键作用。此外,文章还展望了IPv6在未来网络安全、物联网整合以及新兴技术中的应用前景,强调了掌握IPv6技术对于把握未来互联网发展趋势的重要性。
|
12天前
|
机器学习/深度学习 人工智能 算法框架/工具
深度学习中的卷积神经网络(CNN)及其在图像识别中的应用
【9月更文挑战第31天】本文旨在通过浅显易懂的语言和直观的比喻,为初学者揭开深度学习中卷积神经网络(CNN)的神秘面纱。我们将从CNN的基本原理出发,逐步深入到其在图像识别领域的实际应用,并通过一个简单的代码示例,展示如何利用CNN进行图像分类。无论你是编程新手还是深度学习的初学者,这篇文章都将为你打开一扇通往人工智能世界的大门。
|
13天前
|
SQL 安全 算法
网络安全的盾牌与剑:漏洞防御与加密技术的实战应用
【9月更文挑战第30天】在数字时代的浪潮中,网络安全成为守护信息资产的关键防线。本文深入浅出地探讨了网络安全中的两大核心议题——安全漏洞与加密技术,并辅以实例和代码演示,旨在提升公众的安全意识和技术防护能力。