Windows Phone Posting Data to Web Server URL (Website) |
Windows Phone Posting Data to Web Server URL (Website) ในการเขียน Windows Phone เพื่อส่งค่า POST ไปยัง URL (Website) นั้น สามารถทำได้ง่าย ๆ ด้วย function ของ WebClient และ UploadStringAsync เพียงระบุ URL ปลายทาง และ Parameters ค่า POST ที่ต้องการส่ง ก็สามารถส่งได้ทันที โดยใน UploadStringAsync จะมี Event ที่หน้าที่ควบคุมสถานะการทำงานอยู่ 2 ตัวคือ UploadStringCompleted และ UploadProgressChanged และในฝั่งของ Web Server สามารถที่จะรับค่า POST ได้ง่าย ๆ เหมือนกับการเรียนโปรแกรมในภาษานั้น ๆ ได้ตามปกติ
Windows Phone Posting Data to Web Server
Post and UploadProgressChanged Syntax
Private Sub MainPage_Loaded(sender As Object, e As System.Windows.RoutedEventArgs)
Dim url As String = "http://localhost/myphp/post.php"
Dim uri As Uri = New Uri(url, UriKind.Absolute)
Dim postData As StringBuilder = New StringBuilder()
postData.AppendFormat("{0}={1}", "Parameter1", "Value1")
postData.AppendFormat("&{0}={1}", "Parameter2", "Value2")
Dim client As WebClient
client = New WebClient()
client.Headers(HttpRequestHeader.ContentType) = "application/x-www-form-urlencoded"
client.Headers(HttpRequestHeader.ContentLength) = postData.Length.ToString()
AddHandler client.UploadStringCompleted, AddressOf client_UploadStringCompleted
AddHandler client.UploadProgressChanged, AddressOf client_UploadProgressChanged
client.UploadStringAsync(uri, "POST", postData.ToString())
End Sub
Private Sub client_UploadProgressChanged(sender As Object, e As UploadProgressChangedEventArgs)
End Sub
Private Sub client_UploadStringCompleted(sender As Object, e As UploadStringCompletedEventArgs)
End Sub
รูปแบบการ POST ด้วยการใช้งาน WebClient และ UploadStringAsync แบบง่าย ๆ
การรับค่าจาก Post ในการรับค่า Post จาก Windows Phone ส่งไปสามารถรับได้ทุกภาษาเช่น
PHP
$_POST["var"]
ASP/ASP.NET
Request.Form("var")
และภาษาอื่น ๆ ก็ใช้หลักการรับค่า POST ได้เช่นเดียวกัน
ในตัวอย่างนี้เราจะใช้ php ในการทำงานที่ฝั่งของ Web Server โดย php จะทำการรับค่าที่ถูกส่งจาก Windows Phone แล้วนำค่าที่ได้เหล่านั้นไปทำการเขียนลงใน Text file ที่ฝั่งบน Web Server
post.php
<?php
$strFileName = "thaicreate.txt";
$objFopen = fopen($strFileName, 'w');
$strText = "Name = ". $_POST["Name"];
fwrite($objFopen, $strText);
fwrite($objFopen, "\r\n");
$strText = "Email = ".$_POST["Email"];
fwrite($objFopen, $strText);
fwrite($objFopen, "\r\n");
$strText = "Tel = ".$_POST["Tel"];
fwrite($objFopen, $strText);
fclose($objFopen);
echo "Write data in completed.";
?>
ไฟล์ php ที่จะทำหน้าที่รับค่า Post จาก Windows Phone และเขียนข้อมูลที่ได้ลงใน Text File
Windows Phone Project
MainPage.xaml
<!--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="ApplicationTitle" Text="MY APPLICATION" Style="{StaticResource PhoneTextNormalStyle}"/>
<TextBlock x:Name="PageTitle" Text="page name" 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">
<TextBlock Height="64" HorizontalAlignment="Left" Margin="9,273,0,0" Name="txtResult" Text="Result" VerticalAlignment="Top" Width="441" TextAlignment="Center" FontSize="40" />
</Grid>
</Grid>
MainPage.xaml.vb (VB.NET)
Imports System.IO
Imports System.Text
Imports System.IO.IsolatedStorage
Imports Microsoft.Phone.Tasks
Partial Public Class MainPage
Inherits PhoneApplicationPage
' Constructor
Public Sub New()
InitializeComponent()
AddHandler Loaded, AddressOf MainPage_Loaded
End Sub
Private Sub MainPage_Loaded(sender As Object, e As System.Windows.RoutedEventArgs)
Dim url As String = "http://localhost/myphp/post.php"
Dim uri As Uri = New Uri(url, UriKind.Absolute)
Dim postData As StringBuilder = New StringBuilder()
postData.AppendFormat("{0}={1}", "Name", HttpUtility.UrlEncode("Weerachai Nukitram"))
postData.AppendFormat("&{0}={1}", "Email", HttpUtility.UrlEncode("[email protected]"))
postData.AppendFormat("&{0}={1}", "Tel", HttpUtility.UrlEncode("0819876107"))
Dim client As WebClient
client = New WebClient()
client.Headers(HttpRequestHeader.ContentType) = "application/x-www-form-urlencoded"
client.Headers(HttpRequestHeader.ContentLength) = postData.Length.ToString()
AddHandler client.UploadStringCompleted, AddressOf client_UploadStringCompleted
AddHandler client.UploadProgressChanged, AddressOf client_UploadProgressChanged
client.UploadStringAsync(uri, "POST", postData.ToString())
End Sub
Private Sub client_UploadProgressChanged(sender As Object, e As UploadProgressChangedEventArgs)
Me.txtResult.Text = "Uploading.... " & e.ProgressPercentage & "%"
End Sub
Private Sub client_UploadStringCompleted(sender As Object, e As UploadStringCompletedEventArgs)
Me.txtResult.Text = e.Result
End Sub
End Class
MainPage.xaml.cs (C#)
using System;
using System.Windows;
using Microsoft.Phone.Controls;
using System.IO;
using System.Text;
using System.Net;
using System.Windows.Controls;
namespace PhoneApp
{
public partial class MainPage : PhoneApplicationPage
{
// Constructor
public MainPage()
{
InitializeComponent();
Loaded += MainPage_Loaded;
}
private void MainPage_Loaded(object sender, System.Windows.RoutedEventArgs e)
{
string url = "http://localhost/myphp/post.php";
Uri uri = new Uri(url, UriKind.Absolute);
StringBuilder postData = new StringBuilder();
postData.AppendFormat("{0}={1}", "Name", HttpUtility.UrlEncode("Weerachai Nukitram"));
postData.AppendFormat("&{0}={1}", "Email", HttpUtility.UrlEncode("[email protected]"));
postData.AppendFormat("&{0}={1}", "Tel", HttpUtility.UrlEncode("0819876107"));
WebClient client = default(WebClient);
client = new WebClient();
client.Headers[HttpRequestHeader.ContentType] = "application/x-www-form-urlencoded";
client.Headers[HttpRequestHeader.ContentLength] = postData.Length.ToString();
client.UploadStringCompleted += client_UploadStringCompleted;
client.UploadProgressChanged += client_UploadProgressChanged;
client.UploadStringAsync(uri, "POST", postData.ToString());
}
private void client_UploadProgressChanged(object sender, UploadProgressChangedEventArgs e)
{
this.txtResult.Text = "Uploading.... " + e.ProgressPercentage + "%";
}
private void client_UploadStringCompleted(object sender, UploadStringCompletedEventArgs e)
{
this.txtResult.Text = e.Result;
}
}
}
ในตัวอย่างนี้มี Code ทั้งที่เป็น VB.NET และ C# และสามารถดาวน์โหลด All Code ทั้งหมดได้จากส่วนท้ายของบทความ (Login สมาชิกก่อน)
Screenshot
แสดงการ Post ข้อมูลไปยัง Web Server
ไฟล์ที่ถุกเขียนด้วย PHP ในฝั่งของ Web Server
|