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

来源:互联网 发布:yeah i said it 编辑:程序博客网 时间:2024/05/18 02:47

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

<phone:PhoneApplicationPage x:Class="WindowsPhoneLiuyan.MainPage" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:phone="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone" xmlns:shell="clr-namespace:Microsoft.Phone.Shell;assembly=Microsoft.Phone" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:Data="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Data" mc:Ignorable="d" d:DesignWidth="480" d:DesignHeight="768" FontFamily="{StaticResource PhoneFontFamilyNormal}" FontSize="{StaticResource PhoneFontSizeNormal}" Foreground="{StaticResource PhoneForegroundBrush}" SupportedOrientations="Portrait" Orientation="Portrait" shell:SystemTray.IsVisible="True"> <!--LayoutRoot is the root grid where all page content is placed--> <Grid x:Name="LayoutRoot" Background="Transparent"> <Grid.RowDefinitions> <RowDefinition Height="Auto"/> <RowDefinition Height="*"/> </Grid.RowDefinitions> <!--TitlePanel contains the name of the application and page title--> <StackPanel x:Name="TitlePanel" Grid.Row="0" Margin="12,17,0,28"> <TextBlock x:Name="PageTitle" Text="网络留言板" Margin="9,-7,0,0" Style="{StaticResource PhoneTextTitle1Style}"/> </StackPanel> <!--ContentPanel - place additional content here--> <Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0"> <Canvas Height="600" Margin="0,4,6,4"> <TextBlock x:Name="name1" Canvas.Top="327" Canvas.Left="8" Text="网 名:" Foreground="#FFF7F6F6"/> <TextBox x:Name="name" Width="122" Canvas.Left="86" Canvas.Top="308" Background="#FFFBF6F6"/> <TextBlock x:Name="message1" Canvas.Left="11" Canvas.Top="360" Text="留 言:" Foreground="#FFFBF9F9"/> <TextBox x:Name="message" Width="321" Canvas.Left="86" Canvas.Top="360" VerticalScrollBarVisibility="Hidden" Height="124"/> <Button Canvas.Left="30" Canvas.Top="490" Content="保存" Height="71" Name="save" Width="160" Click="save_Click" /> <Button Canvas.Left="217" Canvas.Top="490" Content="重置" Height="71" Name="reset" Width="160" Click="reset_Click" /> <TextBox Canvas.Left="-4" Canvas.Top="6" Height="296" Name="messages" Text="TextBox" Width="460" AcceptsReturn="True" /> </Canvas> </Grid> </Grid></phone:PhoneApplicationPage>
复制代码
using System;using System.Collections.Generic;using System.Linq;using System.Net;using System.Windows;using System.Windows.Controls;using System.Windows.Documents;using System.Windows.Input;using System.Windows.Media;using System.Windows.Media.Animation;using System.Windows.Shapes;using Microsoft.Phone.Controls;using System.Text;using System.IO;using System.Collections.ObjectModel;namespace WindowsPhoneLiuyan{ public partial class MainPage : PhoneApplicationPage { public MainPage() { InitializeComponent(); getMessage(); } private void save_Click(object sender, RoutedEventArgs e) { UriBuilder fullUri = new UriBuilder("http://localhost/liuyan/messege.ashx"); fullUri.Query = "type=insert&name=" + name.Text + "&description=" + message.Text; // 创建WebRequest HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create(fullUri.Uri); // 创建同步的AsyncRequest UpdateState State = new UpdateState(); State.AsyncRequest = myRequest; // 开始异步请求 myRequest.BeginGetResponse(new AsyncCallback(HandleMyResponse), State); } public void getMessage() { UriBuilder fullUri = new UriBuilder("http://localhost/liuyan/messege.ashx"); fullUri.Query = "type=get"; // 创建WebRequest HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create(fullUri.Uri); // 创建同步的AsyncRequest UpdateState State = new UpdateState(); State.AsyncRequest = myRequest; // 开始异步请求 myRequest.BeginGetResponse(new AsyncCallback(HandleMyResponse), State); } private void HandleMyResponse(IAsyncResult asyncResult) { // 获取返回的信息 UpdateState myState = (UpdateState)asyncResult.AsyncState; HttpWebRequest myRequest = (HttpWebRequest)myState.AsyncRequest; //结束异步请求 myState.AsyncResponse = (HttpWebResponse)myRequest.EndGetResponse(asyncResult); Stream streamResult = myState.AsyncResponse.GetResponseStream(); Deployment.Current.Dispatcher.BeginInvoke(() => { if (streamResult.Length != 0) { StreamReader sr = new StreamReader(streamResult); messages.Text = sr.ReadToEnd(); } }); } private void reset_Click(object sender, RoutedEventArgs e) { name.Text = ""; message.Text = ""; } } public class UpdateState { public HttpWebRequest AsyncRequest { get; set; } public HttpWebResponse AsyncResponse { get; set; } }}
复制代码

web依然使用.NET

Message.ashx文件

using System;using System.Collections.Generic;using System.Linq;using System.Web;using System.Data.OleDb;using System.Data;namespace liuyan.Web{ /// <summary> /// Messege 的摘要说明 /// </summary> public class Message : IHttpHandler { public void ProcessRequest(HttpContext context) { context.Response.ContentType = "text/plain"; string type = context.Request.QueryString["type"].ToString(); switch (type) { case "get": get(context); break; case "insert": insert(context); break; default: break; } } /// <summary> /// 获取留言板数据 /// </summary> /// <param name="context"></param> public void get(HttpContext context) { string messages = ""; OleDbCommand cmd = new OleDbCommand(); SQLExcute("SELECT * from about order by id desc", cmd); OleDbDataAdapter da = new OleDbDataAdapter(); da.SelectCommand = cmd; DataSet ds = new DataSet(); da.Fill(ds); foreach (DataRow dr in ds.Tables[0].Rows) { messages += dr[1] + " say:" + dr[2]+" "; } context.Response.Write(messages.ToString()); } /// <summary> /// 先往access数据库插入数据 然后再查询返回数据 /// </summary> /// <param name="context"></param> public void insert(HttpContext context) { string name = context.Request.QueryString["name"].ToString(); string description = context.Request.QueryString["description"].ToString(); string sql = "insert into about(name,description) values('" + name + "','" + description + "')"; SQLExcute(sql); string messages = ""; OleDbCommand cmd = new OleDbCommand(); SQLExcute("SELECT * from about order by id desc", cmd); OleDbDataAdapter da = new OleDbDataAdapter(); da.SelectCommand = cmd; DataSet ds = new DataSet(); da.Fill(ds); foreach (DataRow dr in ds.Tables[0].Rows) { messages += "("+dr[1]+")" + " say:" + dr[2]; } context.Response.Write(messages.ToString()); } //SQL的操作 private void SQLExcute(string SQLCmd) { string ConnectionString = "PROVIDER=Microsoft.Jet.OLEDB.4.0;DATA SOURCE=D:\\code\\Message\\App_Data\\information.mdb"; OleDbConnection conn = new OleDbConnection(ConnectionString); conn.Open(); OleDbCommand cmd = new OleDbCommand(); cmd.Connection = conn; cmd.CommandTimeout = 15; cmd.CommandType = CommandType.Text; cmd.CommandText = SQLCmd; cmd.ExecuteNonQuery(); conn.Close(); } //SQL的操作 是SQLExcute的重构 private void SQLExcute(string SQLCmd, OleDbCommand Cmd) { string ConnectionString = "PROVIDER=Microsoft.Jet.OLEDB.4.0;DATA SOURCE=D:\\code\\Message\\App_Data\\information.mdb"; OleDbCommand cmd = new OleDbCommand(); OleDbConnection Conn = new OleDbConnection(ConnectionString); Conn.Open(); Cmd.Connection = Conn; Cmd.CommandTimeout = 15; Cmd.CommandType = CommandType.Text; Cmd.CommandText = SQLCmd; Cmd.ExecuteNonQuery(); Conn.Close(); } public bool IsReusable { get { return false; } } }}
复制代码
原创粉丝点击