วันอังคารที่ 9 กันยายน พ.ศ. 2557
การเช็คว่า เข้ามาจาก Wifi หรือ 3G
string UserHostName = Request.UserHostName;
string UserHostAddress1 = Request.UserHostAddress;
string ServerName = Request.ServerVariables["SERVER_NAME"];
string isWifi = "";
try {
GetHostEntry = System.Net.Dns.GetHostEntry(Request.UserHostAddress).HostName;
isWifi = "true";
if(GetHostEntry.Contains("asianet.co.th"))
{
if (UserHostName.Substring(2, 1) == ".") {
isWifi = "false";
}
else {
isWifi = "true";
}
}
} catch (Exception ex)
{
isWifi = "false";
}
อธิบาย เพราะว่า AIS กับ Dtac ไม่ได้ทำ DNS ไว้ ทำให้เวลา get System.Net.Dns.GetHostEntry(Request.UserHostAddress).HostName จึงเกิด Error ทำให้เรารู้ว่าเป็น 3G
ส่วน TRUE ทำ DNS ไว้ เพราะฉะนั้น ต้อง check จาก ip ถ้า ขึ้นต้น แค่เลข 2 ตัว เป็น 3G ถ้า 3 ตัว เป็น Wifi จ๊ะ
ใคร งง ตรงไหน ฝากคำถามไว้นะจ๊ะ
วันจันทร์ที่ 8 กันยายน พ.ศ. 2557
ทำให้ Web API รับ การ Cross-Domain Requests จาก Ajax ได้
Web API คือไร ?
เอาง่ายๆ เลยนะ แล้วไว้มีเวลาจะมาเขียน เรื่อง WebAPI แบบละเอียดอีกที
สรุป WebAPI คือ เราเอาไว้ทำ ในการ รับ Request จาก client
โดยในงานนี้ เราจะใช้ Json ในการรับส่งข้อมูลกัน
โดยตามทั่วไปถ้าเราจะรับ-ส่ง request เราจะใช้ ajax ในการรับส่ง
ตัวอย่าง code ดังนี้
var mydata= {
"data": {
"width": "1366",
"heigth": "768",
"map_id": "No",
"DB": "LinkFreeDB"
}
};
$.ajax({
type: "POST",
data: JSON.stringify(mydata),
url: xxx, // แก้เป็น url ของเรา
success: function (data) {
console.log('OK');
}
});
ถ้าภายใน Domain เดียวกัน ก้อจะไมมี ปัญหา แต่ถ้าต่าง Domain ก้อจะเกิด error
ต่าง Domain คือ ?
เช่น http://www.send.com/sendViaAjax.aspx
request ไปยัง http://www.receive.com/DoSomeThing/
เนื่องจาก domain ข้างหน้าไม่เหมือนกัน จึงเกิด error
วิธีแก้ คือ
1.เข้าไป Nuget Downlao package ชื่อว่า Microsoft.AspNet.WebApi.Cors
2. เปิด file ใน App_Start/WebApiConfig.cs. เพิ่ม code ใน WebApiConfig.Register method
config.EnableCors();
3.เพิ่ม [EnableCors] attribute ใน class ที่ extend ApiController
ตัวอย่าง เช่น
[EnableCors(origins: "http://mywebclient.azurewebsites.net"
, headers: "*", methods: "*")]
public class MyController : ApiController
4 ถ้าต้องการ รับทุกweb ที่ request มา ก้อให้กำหนดแบบนี้นะครับ
[EnableCors(origins: "*", headers: "*", methods: "*")]
5. กด F5 แล้วทดลองรัน ดูได้เลยครับ เป็นอันเสร็จพิธี ไปกินข้าวก่อนนะจ๊ะ ทุกคน บะบาย
เอาง่ายๆ เลยนะ แล้วไว้มีเวลาจะมาเขียน เรื่อง WebAPI แบบละเอียดอีกที
สรุป WebAPI คือ เราเอาไว้ทำ ในการ รับ Request จาก client
โดยในงานนี้ เราจะใช้ Json ในการรับส่งข้อมูลกัน
โดยตามทั่วไปถ้าเราจะรับ-ส่ง request เราจะใช้ ajax ในการรับส่ง
ตัวอย่าง code ดังนี้
var mydata= {
"data": {
"width": "1366",
"heigth": "768",
"map_id": "No",
"DB": "LinkFreeDB"
}
};
$.ajax({
type: "POST",
data: JSON.stringify(mydata),
url: xxx, // แก้เป็น url ของเรา
success: function (data) {
console.log('OK');
}
});
ถ้าภายใน Domain เดียวกัน ก้อจะไมมี ปัญหา แต่ถ้าต่าง Domain ก้อจะเกิด error
ต่าง Domain คือ ?
เช่น http://www.send.com/sendViaAjax.aspx
request ไปยัง http://www.receive.com/DoSomeThing/
เนื่องจาก domain ข้างหน้าไม่เหมือนกัน จึงเกิด error
วิธีแก้ คือ
1.เข้าไป Nuget Downlao package ชื่อว่า Microsoft.AspNet.WebApi.Cors
2. เปิด file ใน App_Start/WebApiConfig.cs. เพิ่ม code ใน WebApiConfig.Register method
config.EnableCors();
3.เพิ่ม [EnableCors] attribute ใน class ที่ extend ApiController
ตัวอย่าง เช่น
[EnableCors(origins: "http://mywebclient.azurewebsites.net"
, headers: "*", methods: "*")]
public class MyController : ApiController
4 ถ้าต้องการ รับทุกweb ที่ request มา ก้อให้กำหนดแบบนี้นะครับ
[EnableCors(origins: "*", headers: "*", methods: "*")]
5. กด F5 แล้วทดลองรัน ดูได้เลยครับ เป็นอันเสร็จพิธี ไปกินข้าวก่อนนะจ๊ะ ทุกคน บะบาย
วันพฤหัสบดีที่ 4 กันยายน พ.ศ. 2557
เริ่ม Nosql ด้วย mongoDB
mongoDB เป็น Nosql แบบ Documment database เขียนด้วย C++
ลักษณะการเขียน เป็นแบบ Json style
คำศัพท์
collections = Table
documment = row
field = column
คำสั่ง แนว อ่าน
db.user.find ( { name : "amp"} )
select *
From user
Where name = "amp"
db.user.find ( { name : "amp"} , {name :1 , _id : 0})
select name -- ค่า 0 คือไม่โชว์ หรือ กำหนด true ,false ก้อได้
From user
Where name = "amp"
คำสั่ง แนว เขียน
db.user.insert( { id : 3 , name : "peck" })
หรือ จะ update
db.user.update ( {id : 3} , { $set: { name : "A" } }, { multi: true })
คำสั่ง ดู ว่ามี collections อะไรบ้าง
show collections
คำสั่ง เปลี่ยน ชื่อ field ทั้งหมด โดยยังให้ object id ยังเป็นตัวเดิม
db.user.update ( {} , { $rename: { id : "idNew" } }, { multi: true })
ลักษณะการเขียน เป็นแบบ Json style
คำศัพท์
collections = Table
documment = row
field = column
คำสั่ง แนว อ่าน
db.user.find ( { name : "amp"} )
select *
From user
Where name = "amp"
db.user.find ( { name : "amp"} , {name :1 , _id : 0})
select name -- ค่า 0 คือไม่โชว์ หรือ กำหนด true ,false ก้อได้
From user
Where name = "amp"
คำสั่ง แนว เขียน
db.user.insert( { id : 3 , name : "peck" })
หรือ จะ update
db.user.update ( {id : 3} , { $set: { name : "A" } }, { multi: true })
คำสั่ง ดู ว่ามี collections อะไรบ้าง
show collections
คำสั่ง เปลี่ยน ชื่อ field ทั้งหมด โดยยังให้ object id ยังเป็นตัวเดิม
db.user.update ( {} , { $rename: { id : "idNew" } }, { multi: true })
วันอังคารที่ 2 กันยายน พ.ศ. 2557
แนะนำ Nosql
NoSQL
Redis => Key-value
MongoDB => Document
Cassandra => Column
Couchbase => Document
Riak => Key-value
HBase => Column
Neo4j => Graph
พบว่ามี NoSQL ที่ได้รับความนิยมมากๆ นั้นประกอบไปด้วย 4 ตัวคือ
ส่วนตัวอื่นๆ ที่ได้รับความนิยม ก็คือ
พบว่ามี NoSQL ที่ได้รับความนิยมมากๆ นั้นประกอบไปด้วย 4 ตัวคือ
- MongoDB
- Cassandra
- HBase
- Redis
โดยสรุปแล้ว
ในโลกของ NoSQL นั้น ตัวที่ได้รับความนิยมสุดๆ คือ Hadoop นั่นแหละส่วนตัวอื่นๆ ที่ได้รับความนิยม ก็คือ
- MongoDB
- Cassandra
- Hbase
- Redis (ปัจจุบัน ยังไม่รองรับ windows 02/09/54)
วันจันทร์ที่ 1 กันยายน พ.ศ. 2557
SignalR ตอนที่ 2
เริ่มต้น ศึกษา SignalR ผ่าน Persistent Connections
Persistent Connections คืออะไร ?
Persistent Connections คือ lower-level API ที่ทาง .NET สร้างขึ้นมาเพื่อติดต่อกันแบบใกล้ชิด โดยติดต่อกันในระดับชั้น (layer)ระหว่าง client กับ server แต่เนื่องจาก API ตัวนี้อยู่ในระดับ lower-level จึงไม่เหมาะเอามาใช้งานที่ complex หากต้องการนำไปใช้งานจริง ผู้เขียนแนะนำว่าให้ใช้ Hubs ในการติดต่อจะดีกว่า ส่วนสำหรับ Hubs นั้นผู้เขียนจะเขียนแนะนำในบทความ SignalR ตอนนที่ 3 โปรดติดตามต่อไป เรากลับเข้าเรื่อง Persistent Connections กันดีกว่า มาทำความรู้จักกัน ถ้าจะเริ่มเขียน ใช้งาน SignalR ควรจะทำความรู้จัก กับ เจ้าตัวนี้ก่อน เพราะการเขียน เชื่อมกัน ง่ายและไม่ซับซ้อน เข้าใจโดยง่าย โดยตัวอย่างที่จะแสดง จะแสดง การเชื่อมต่อ ระหว่าง หน้า Web และ หน้า Application มาเริ่มกันเลยดีกว่า
connection.start().done(function () {
console.log("Connected");
$("#chatWindow").val("Connected\n");
$("#sendButton").click(function () {
connection.send($("#messageTextBox").val());
$("#messageTextBox").val("");
});
});
connection.received(function (data) {
$("#chatWindow").val($("#chatWindow").val() + data + "\n");
});
});
มาจัดการฝั่ง App สร้างโปรเจ็ตขึ้นมาใหม่ เป็นแบบ Console ล่ะกัน
เข้า Nuget download Microsoft.AspNet.SignalR.Client
แล้วเขียน CODE ดังนี้ // Connect to the service var connection = new Connection("http://localhost:47338/chat");
// Print the message when it comes in
connection.Received += data => Console.WriteLine(data);
// Start the connection
connection.Start().ContinueWith(t => Console.WriteLine("Connected")).Wait();
string line = null;
while ((line = Console.ReadLine()) != null)
{
// Send a message to the server
connection.Send(line).Wait();
}
เป็นอันเสรฦ็จ พิธี เด๋วว่างๆ จะ up รูปให่นะ ใครตามไม่ทันยังไง เขียน comment ทิ้งไว้ล่ะกัน จะปรับปรุงให้นะครับ
บายไปล่ะ
Persistent Connections คืออะไร ?
Persistent Connections คือ lower-level API ที่ทาง .NET สร้างขึ้นมาเพื่อติดต่อกันแบบใกล้ชิด โดยติดต่อกันในระดับชั้น (layer)ระหว่าง client กับ server แต่เนื่องจาก API ตัวนี้อยู่ในระดับ lower-level จึงไม่เหมาะเอามาใช้งานที่ complex หากต้องการนำไปใช้งานจริง ผู้เขียนแนะนำว่าให้ใช้ Hubs ในการติดต่อจะดีกว่า ส่วนสำหรับ Hubs นั้นผู้เขียนจะเขียนแนะนำในบทความ SignalR ตอนนที่ 3 โปรดติดตามต่อไป เรากลับเข้าเรื่อง Persistent Connections กันดีกว่า มาทำความรู้จักกัน ถ้าจะเริ่มเขียน ใช้งาน SignalR ควรจะทำความรู้จัก กับ เจ้าตัวนี้ก่อน เพราะการเขียน เชื่อมกัน ง่ายและไม่ซับซ้อน เข้าใจโดยง่าย โดยตัวอย่างที่จะแสดง จะแสดง การเชื่อมต่อ ระหว่าง หน้า Web และ หน้า Application มาเริ่มกันเลยดีกว่า
- Download Microsoft.AspNet.SignalR มาติดที่เครื่องเรา
- Add new item ชื่อว่า OwinStartup เข้ามา กำหนด เป็น app.MapSignalR<ChatConnection>("/chat");
- สร้าง class chat ขึ้นมา เพื่อคอยจัดการ กับ Message ที่ส่งมาจาก Client ต่างๆๆ (web and app) มาจัดการ command ที่ใช้ในการส่งหากัน โดยอาศัย javascript <script> $(function () {
connection.start().done(function () {
console.log("Connected");
$("#chatWindow").val("Connected\n");
$("#sendButton").click(function () {
connection.send($("#messageTextBox").val());
$("#messageTextBox").val("");
});
});
connection.received(function (data) {
$("#chatWindow").val($("#chatWindow").val() + data + "\n");
});
});
มาจัดการฝั่ง App สร้างโปรเจ็ตขึ้นมาใหม่ เป็นแบบ Console ล่ะกัน
เข้า Nuget download Microsoft.AspNet.SignalR.Client
แล้วเขียน CODE ดังนี้ // Connect to the service var connection = new Connection("http://localhost:47338/chat");
// Print the message when it comes in
connection.Received += data => Console.WriteLine(data);
// Start the connection
connection.Start().ContinueWith(t => Console.WriteLine("Connected")).Wait();
string line = null;
while ((line = Console.ReadLine()) != null)
{
// Send a message to the server
connection.Send(line).Wait();
}
เป็นอันเสรฦ็จ พิธี เด๋วว่างๆ จะ up รูปให่นะ ใครตามไม่ทันยังไง เขียน comment ทิ้งไว้ล่ะกัน จะปรับปรุงให้นะครับ
บายไปล่ะ
วันศุกร์ที่ 29 สิงหาคม พ.ศ. 2557
SignalR ตอนที่ 1
วันนี้เรามาทำความรู้จัก กับ SignalR กันดีก่า
SignalR คืออะไร ?
SignalR คือ library หนึ่ง ของ ASP.NET ที่เอาไว้จัดการงานแบบ Realtime โดยเขียน Code ไว้ในส่วนกลางแล้ว มี Client มา Connect Register ลงทะเบียนเอาไว้ แล้วเมื่อมี User มาแจ้ง update ข้อมูล Code ที่ถูกเขียนไว้ในส่วนกลางจะทำหน้าที่รับและกระจายข้อมูลไปยัง ทุกๆ Client ที่ได้มีการลงทะเบียนไว้
SignalR เหมาะสำหรับงานประเภทไหน โดยส่วนตัวแล้วผู้เขียนคิดว่า SignalR เหมาะสำรับงานแบบที่ต้องการความ Realtime ในการ display data ยกตัวอย่าง เช่น
SignalR และ WebSocket
SignalR ใช้เทคโนโลยี WebSocket ในการส่งผ่านข้อมูลออกไปให้ปลายทางที่ available พร้อมรับข้อมูล และส่งผ่านกลับอีกครั้งเมื่อมีความจำเป็นต้องเรียกอีกครั้ง โดยที่ทาง developer ไม่ต้องเขียน code implement เอง code ในส่วนนี้ได้ถูกจัดการให้อย่างพร้อมใช้งาน ที่สำคัญ code ที่ถูกเขียนขึ้นจะไม่ต้องกังวลเกี่ยวกับการเขียนเรียกเส้นทาง (Path) ของแต่ละ client ที่ Register เอาไว้ เพราะว่า SignalR จะทำการค้นหาและ Update ข้อมูลปลายทางของเครื่อง Client ที่รับข้อมูลโดยอัตโนมัติ
ด้วยเหตุผลที่กล่าวมาข้างต้น ไม่มีเหตุผลเลยที่ทำไม เราถึงจะไม่เลือกใช้ SignalR มา apply ในงานของเรา แล้วคุณจะรู้สึกสนุก ชอบในความง่ายและหลงรัก ใน SignalR
SignalR คืออะไร ?
SignalR คือ library หนึ่ง ของ ASP.NET ที่เอาไว้จัดการงานแบบ Realtime โดยเขียน Code ไว้ในส่วนกลางแล้ว มี Client มา Connect Register ลงทะเบียนเอาไว้ แล้วเมื่อมี User มาแจ้ง update ข้อมูล Code ที่ถูกเขียนไว้ในส่วนกลางจะทำหน้าที่รับและกระจายข้อมูลไปยัง ทุกๆ Client ที่ได้มีการลงทะเบียนไว้
SignalR เหมาะสำหรับงานประเภทไหน โดยส่วนตัวแล้วผู้เขียนคิดว่า SignalR เหมาะสำรับงานแบบที่ต้องการความ Realtime ในการ display data ยกตัวอย่าง เช่น
- งานประเภท logistics ในการรับข้อมูลพิกัด lat long แล้วนำวาดบนแผนที่
- งานประเภท Business แสดง Graph ข้อมูลแบบ Realtime
- งานประเภท Networks Monitor ไว้แสดงข้อมูล ปริมาณ traffic การใช้งานข้อมูล
- งานประเภท Chat Program ไว้คุยกันผ่านหน้า Web
SignalR และ WebSocket
SignalR ใช้เทคโนโลยี WebSocket ในการส่งผ่านข้อมูลออกไปให้ปลายทางที่ available พร้อมรับข้อมูล และส่งผ่านกลับอีกครั้งเมื่อมีความจำเป็นต้องเรียกอีกครั้ง โดยที่ทาง developer ไม่ต้องเขียน code implement เอง code ในส่วนนี้ได้ถูกจัดการให้อย่างพร้อมใช้งาน ที่สำคัญ code ที่ถูกเขียนขึ้นจะไม่ต้องกังวลเกี่ยวกับการเขียนเรียกเส้นทาง (Path) ของแต่ละ client ที่ Register เอาไว้ เพราะว่า SignalR จะทำการค้นหาและ Update ข้อมูลปลายทางของเครื่อง Client ที่รับข้อมูลโดยอัตโนมัติ
ด้วยเหตุผลที่กล่าวมาข้างต้น ไม่มีเหตุผลเลยที่ทำไม เราถึงจะไม่เลือกใช้ SignalR มา apply ในงานของเรา แล้วคุณจะรู้สึกสนุก ชอบในความง่ายและหลงรัก ใน SignalR
สมัครสมาชิก:
บทความ (Atom)