MAIN MENU
News Php Tips Android Programming Design Pattern By PHP C# using Linq น่าใช้จริงๆ C# Tips & Technique C# Design Pattern Linux Quick Tips Java & JavaScript Tips Database ZengCode Framework Guide Zeng Code Code Programming IPhone (Tips and Trick)
|
|

สวัสดีครับแฟนๆ Madoogun.com ยินดีต้อนรับสู่บ้านใหม่ครับ
ZengCode framework ขอฝากเนื้อฝากตัวกับชาว Developer ทุกท่านด้วยนะครับ
ผู้พัฒนาเองไม่ได้หวังว่ามันจะใช้งานได้ดีขนาดไปเทียบกับจ้างยุทธจักรด้านนี้
ไม่ว่าจะเป็น Prado หรือแม้แต่ Cake ซึ่งนั้นเค้าระดับเทพเรียกพี่แล้วครับ
ผมก็เป็นแค่ Developer ธรรมดา ๆ คนนึงครับ
ที่สร้าง framework ตัวนี้ขึ้นมาก็เพื่อศึกษา และพัฒนาทักษะด้าน OOP ของตัวเอง
อีกทั้งปกติตัวผมเองเขียนโค้ดได้มั่วซั่วมาก ไม่มีระเบียบ อยากเขียนอะไรคิดออกก็เขียน
ไม่มีแบบแผน บางทีกลับมาแก้โค้ดตัวเอง บอกได้คำเดียวว่า เซ็งโครต เซ็ง โครต โครต
และนี่จึงเป็นที่มาของชื่อ framework ของผมครับ
และอีกประเด็นก็เพื่อจุดประการให้พี่น้องชาว Developer ทุกท่าน
ช่วยกันคิดพัฒนาสิ่งต่างๆ เพื่อวงการด้าน IT
ของเราได้ทัดเทียมนานาอารยะประเทศเค้านะคร ับผมขอเป็นจุดเล็กๆจุดนึงที่พร้อมจะมุ่งมั่น
พัฒนาผลงานด้านนี้ต่อไปครับ สู้ๆ นะพี่น้องชาว Developer ทุกท่าน
|
บทความล่าสุด
ประยุกต์การสร้าง object ตอนรันไทม์กับ polymorphism (2010-03-17)
จากหัวข้อที่แล้วบางท่านอาจจะมองไม่ออกว่าจะเอาไปใช้งานอย่างไรได้ ผมก็มีตัวอย่างการประยุกต์ใช้ได้อย่างหนึ่ง (ที่คิดออกตอนนี้)
นั่นก็คือนำไปใช้กับ Class ต่างๆ ที่มีคุณสมบัติ polymorphism เพื่อไม่ให้ขาดตอน ลุยกันเลยครับ
class Animal
{
public virtual String Say()
{
return "FooFooooooooooooo";
}//
}//
class Dog : Animal
{
public override string Say()
{
return "Hong Hong";
}
}//
class Cat : Animal
{
public override string Say()
{
return "Maew Maew";
}
}//
class ObjectFactory
{
public object GetObject(String objName)
{
Assembly assembly = Assembly.GetExecutingAssembly();
AssemblyName assemblyName = assembly.GetName();
Type objType = assembly.GetType(assemblyName.Name + "."+objName);
return Activator.CreateInstance(objType);
}//
}//
class AnimalFactory
{
public Animal BuildAnimal(String animalType)
{
return (Animal)new ObjectFactory().GetObject(animalType);
}//
}// |
........
อ่านต่อคลิกที่นี้
|
Create Object ตอนรันไทม์ครับ (2010-03-17)
นี่เป็นวิธีนึงที่สามารถทำได้นะครับ และผมก็ทดลองแล้วว่าทำงานได้จริง
|
class SampleClass
{
public void Call1(String str)
{
MessageBox.Show("Call1 : " + str);
}//
public void Call2(String str)
{
MessageBox.Show("Call2 : " + str);
}//
}////
ต้องการ create object ของ คลาส SampleClass เรียกใช้ Method Call1 ได้ดังนี้ครับ
.........................
|
อ่านต่อคลิกที่นี้
|
Anonymous Method ใน C# คือ ? (2010-03-17)
Anonamous Method เป็น Feature ใหม่ที่มีขึ้นใน .NET 2.0 คือไม่จำเป็นต้องสร้าง method นั้น ๆ ไว้ แล้วค่อยเรียกใช้มัน แต่สร้างและใช้
method ใหม่ได้ทันทีในที่ต้องการ ดูตัวอย่างต่อไปนี้นะครับ
|
Button btn;
btn = new Button();
.....
btnAdd.Click += new EventHandler(btn_Click);
......
void btn_Click(object sender, EventArgs e) {
MessageBox.Show("Hello World");
}
เราสามารถใช้ Feature ด้าน Anonamous Method ได้ดังนี้คือ
Button btn;
btn = new Button();
.....
btnAdd.Click += delegate(object sender, EventArgs e){ MessageBox.Show("Hello World"); }
หรือ จะละทิ้ง signature ของ Anonamous Method ก็ได้
btnAdd.Click += delegate { MessageBox.Show("Hello World"); }
......
|
อ่านต่อคลิกที่นี้
|
Delegate ใน C# (2010-03-16)
Delegate คือ อะไร เอาแบบง่ายๆ ก็คือ Delegate เป็น Reference Type ของ Method ไม่ว่าจะเป็น Static Method หรือว่าเป็น
Method ของ Object ใดๆ ลองมาดูตัวอย่างง่ายๆ กันนะครับ
delegate มีความจำเป็นในหลายๆ สถานการณ์ เช่น
* multi-thread: ในภาษา C# เราสามารถวิ่งหลายๆ โปรเซสไปพร้อมๆ กันได้เรียกว่า thread เมื่อจะเริ่ม thread ใหม่เราจำเป็นต้องระบุ method ที่จะให้ไปทำงานโดยอาศัย delegate
* Library: เมื่อสร้างคลาสไลบรารีบ่อยครั้งที่คลาสจำเป็นต้องเรียกกลับไปยังคลาสผู้ขอ ใช้บริการ (class client) ซึ่งทำได้โดยอาศัย delegate เท่านั้น
* Event: โปรแกรมที่ทำงานบนระบบปฏิบัติการ Windows จะพบ event ตลอดเวลา (event-driven programming) เช่นเมื่อผู้ใช้คลิกเมาส์จะมี event Mouse_Click เกิดขึ้น การกำหนดว่าจะให้ไปทำงาน method ใดเมื่อเกิด event จำเป็นต้องอาศัย delegate
(ผมก็ยอมรับว่ายังงง ๆ ที่จะนำไปใช้งาน ยังไม่เคยเอาไปใช้งานจริงๆ ซะที คงต้องมีสักวันเจอกัน Delegate)
1.Delegate ของ Static Method ธรรมด
|
//ประกาศ ตัวแทนชื่อ MyDelegate ที่จะทำงานแทน Method ที่ไม่มีการคืนค่าและรับ parameter 1 ตัวมีชนิดเป็น String
public delegate void MyDelegate(String str);
public void ShowMyName(String name)
{
MessageBox.Show("My name is "+name);
}//
//ประกาศตัวแทนของ MyDelegate ชื่อว่า CallDelegate โดยทำหน้าที่แทน Method ที่ชื่อว่า ShowMyName
MyDelegate CallDelegate = new MyDelegate(ShowMyName);
CallDelegate("Chiwa");
ผลก็จะมี Message Box ขึ้นโชว์ว่า My name is Chiwa
|
..................
อ่านต่อคลิกที่นี้
|
Adapter Pattern (2010-03-15)
หากว่าเรามี คลาสที่ใช้งานอยุ่ แล้วเรามี คลาสใหม่ที่สร้างมามีความสมารถใหม่(ซึ่งเราซื้อมาไม่สามารถแก้ไขโค้ดได้) เราต้องการคลาสใหม่ที่มี interface
เหมือนคลาสใหม่ที่ซื้อมาและทำงานสอดคล้องกับระบบเก่าที่เรามี(ใช้คลาสเดิม) นี่เลยครับ Adapter Pattern
namespace Adapter
{
public class CanSwim
{
public string Swim()
{
return "I am swiming in the pool";
}
}//CanSwim
public class Bird
{
public String Fly()
{
return "I can fly";
}
}//Bird
public class CanSwimAdapter : Bird
{
public CanSwim swimable;
public CanSwimAdapter(CanSwim swim)
{
this.swimable = swim;
}
}
}//Adapter |
.............
อ่านต่อคลิกที่นี้
|
Prototype Pattern (2010-03-15)
Protype pattern is a pattern for produce new objects from a instance, of the same class, basically clonning objects.
For implement prototype pattern in c#, class must implement ICloneable interface ขออนุญาติไม่แปรนะครับ กัวจะแปลแล้วเข้าใจยากหนักกว่าเดิม
namespace Prototype
{
public class MyPrototype : ICloneable
{
public String myName;
public MyPrototype(String myName)
{
this.myName = myName;
}
public object Clone()
{
MyPrototype newObj = new MyPrototype(this.myName);
newObj.myName = this.myName;
return newObj;
}
}//class
}//Prototype |
...........................
อ่านต่อคลิกที่นี้
|
Builder Pattern (2010-03-15)
Factory Method ที่ทำหน้าที่สร้าง Object ของ Class ที่ต่างกันแต่มี Super Class เดียวกันมาแล้ว ซึ่งเราทราบแล้วว่าการที่ Object ที่ถูกสร้างจาก Factory Method ต้องมาจาก Super Class เดียวกันนั้น ถือเป็นข้อจำกัดอันหนึ่งของ Factory Method ในบางโอกาส เราจำเป็นต้องใช้ Object ที่เกิดจากการรวมตัวกนของหลาย ๆ object การรวมหลาย ๆ object เข้าด้วยกัน ซึ่ง Design Pattern ที่เหมาะแก่การนำไปใช้เพื่อสร้าง Object ในลักษณะนี่เรียกว่า “Builder”
|
namespace Builder
{
public abstract class Animal
{
public String name;
public String myFood;
public String leg;
public String animalType;
public String getInformation()
{
return "I am " + this.animalType +"\n"+this.leg+ "\n My name is " + this.name + "\n I eat an " + this.myFood;
}
}//Animal
public class Monkey : Animal
{
public Monkey()
{
this.animalType = "Monkey";
this.myFood = "Banana";
}
}//Monkey
public class Bird : Animal
{
public Bird()
{
this.animalType = "Bird";
this.myFood = "Worm";
}
}//Bird
public abstract class AnimalBuilder
{
public Animal aAnimal;
public abstract void BuildName(String name);
public abstract void BuildLeg();
}//AnimalBuilder
public class MonkeyBuilder : AnimalBuilder
{
public MonkeyBuilder()
{
aAnimal = new Monkey();
}
public override void BuildName(String name)
{
aAnimal.name = name;
}
public override void BuildLeg()
{
aAnimal.leg = "My leg was build for 4 legs "+MonkeyBuilderSpecial.MakeSpecial();
}
}//MonkeyBuilder
public class MonkeyBuilderSpecial
{
public static String MakeSpecial()
{
return ", but i can walk by 2 legs.";
}
}
public class BirdBuilder : AnimalBuilder
{
public BirdBuilder()
{
aAnimal = new Bird();
}
public override void BuildName(String name)
{
aAnimal.name = name;
}
public override void BuildLeg()
{
aAnimal.leg = "My leg was build for 2 legs";
}
}//MonkeyBuilder
public class AnimalConstructor
{
public String name {get; set;}
public void MakeAnimal(AnimalBuilder animalBuilder)
{
animalBuilder.BuildName(this.name);
animalBuilder.BuildLeg();
}
}
}//Builder
..................................
|
อ่านต่อคลิกที่นี้
|
Strategy Pattern (2010-03-15)
Strategy Pattern เป็น design pattern ที่เอาไว้ใช้ตอนที่เราต้องเลือกทำสิ่งหนึ่ง แต่วิธีการหลากหลายออกไป เช่น นักเรียนแต่ละคนไปโรงเรียนได้หลายอย่าง
เช่นนักเรียนบางคนไปโดยรถยนต์ บางคนไปโดยรถมอเตอร์ไซด์ Pattern ตัวนี้ต้องการ interface ตัวหนึ่งในการเลือกว่านักเรียนจะไปโรงเรียนด้วยวิธีใด
ในที่นี้เราใช้ interface ที่ชื่อว่า IGo
class Student
{
private String myName;
private IGo goToSchoolBy;
public Student(String myName)
{
this.myName = myName;
}
public String GoToSchoolBy(IGo igo)
{
goToSchoolBy = igo;
return "I am "+this.myName+", "+goToSchoolBy.Go();
}
}
interface IGo
{
String Go();
}
class goCar : IGo
{
public String Go()
{
return "I go to school by car";
}
}
class goMotorcycle : IGo
{
public String Go()
{
return "I go to school by motorcycle";
}
} |
อ่านต่อคลิกที่นี้
|
Singleton Pattern (2010-03-15)
ทำความรู้จักกับ Design Pattern
Gang of Four (GOF) patterns นั้นถือว่าเป็นพื้นฐานของ design patterns อื่น ๆ ทั้งหมด ได้มีการแยกแยะออกเป็น กลุ่ม ได้ 3 กลุ่ม คือ Creational Structural และ Behavioral ซึ่งผมจะกล่าวถึง design pattern หมดในแต่ละกลุ่มโดยละเอียด – ดังนี้
| Creational Patterns |
| - Abstract Factory |
|
| - Builder |
|
| - Factory Method |
|
| - Prototype |
|
| - Singleton |
|
| Structural Patterns |
| - Adapter |
|
| - Bridge |
|
| - Composite |
|
| - Decorator |
|
| - Facade |
|
| - Flyweight |
|
| - Proxy |
|
| Behavioral Patterns |
| - Chain of Resp. |
|
| - Command |
|
| - Interpreter |
|
| - Iterator |
|
| - Mediator |
|
| - Memento |
|
| - Observer |
|
| - State |
|
| - Strategy |
|
| - Template Method |
|
| - Visitor |
Singleton Pattern คือ การจำกัดจำนวน object ที่สร้างจาก class บางตัวเพียงหนึ่งตัวหรือตามจำนวนที่ต้องการ
เพื่อเป็นการจำกัดหรือควบควม resource บางอย่างของระบบ
มีวิธีการหลักๆ ดังนี้ครับ
1. Class Constructor ต้องเป็นมี accessiblility เป็น private
|
class TestSingleTon
{
private static TestSingleTon instant;
private TestSingleTon() {}
....................................................................
|
2.เมื่อเราจะสร้าง Constructor เป็นแบบ private การสร้าง Object โดย new จะใช้ไม่ได้จะต้องมี Method ในการสร้าง instant ขึ้นมาเช่น
และต้องมีตัวแปรที่เป็น private เพื่อควบคุมการสร้าง object เช่นถ้ามีการสร้างแล้วไม่ให้สร้างอีก หรือควบคุมจำนวน object ในตัวอย่างนี้ให้มีการสร้าง
object ได้ครั้งละ 1 object เท่านั้น
|
class TestSingleTon
{
private static TestSingleTon instant; //อาจจะเป็น couter นับจำนวน object ที่จะให้สร้างได้พร้อมกัน
private TestSingleTon() {}
public static TestSingleTon GetTestSingleTon()
{
if (instant == null)
{
instant = new TestSingleTon();
return instant;
}
return null;
}
.................................................
|
........มีต่อ
อ่านต่อคลิกที่นี้
|
ถามก่อนออกจากโปรแกรม เรื่องง่ายๆ ที่บางคนยังไม่รู้ (2010-03-15)
ถามก่อนออกจากโปรแกรม เรื่องง่ายๆ ที่บางคนยังไม่รู้
protected override void OnClosing(System.ComponentModel.CancelEventArgs e)
{
DialogResult dlg = MessageBox.Show("You want to terminate program?", "Warning", MessageBoxButtons.YesNo);
if (dlg == DialogResult.No)
{
e.Cancel = true;
}
else if (dlg == DialogResult.Yes)
{
e.Cancel = false;
}
} |
อ่านต่อคลิกที่นี้
|
How to make a form full-screen in C# (2010-03-11)
เรามาสร้าง Form ให้ เต็ม หน้าจอกันเถอะครับ
[DllImport("user32.dll")]
private static extern int FindWindow(string lpszClassName, string lpszWindowName);
[DllImport("user32.dll")]
private static extern int ShowWindow(int hWnd, int nCmdShow);
private const int SW_HIDE = 0;
private const int SW_SHOW = 1;
public void FullScreen()
{
Screen currentScreen = Screen.FromRectangle(this.RectangleToScreen(ClientRectangle));
// code to maximize form fullscreen mode
if (currentScreen.Primary)
{
int hWnd = FindWindow("Shell_TrayWnd", "");
ShowWindow(hWnd, SW_HIDE);
this.FormBorderStyle = FormBorderStyle.None;
this.Location = new Point(0, 0);
this.WindowState = FormWindowState.Maximized;
}
else
{
this.FormBorderStyle = FormBorderStyle.None;
this.Location = new Point(currentScreen.Bounds.X, currentScreen.Bounds.Y);
this.WindowState = FormWindowState.Maximized;
}
}
public void NormalScreen()
{
Screen currentScreen = Screen.FromRectangle(this.RectangleToScreen(ClientRectangle));
this.FormBorderStyle = FormBorderStyle.Sizable;
if (currentScreen.Primary)
{
//show the hidden task bar
int hwnd = FindWindow("Shell_TrayWnd", "");
ShowWindow(hwnd, SW_SHOW);
}
this.WindowState = FormWindowState.Maximized;
} |
อ่านต่อคลิกที่นี้
|
Diffirence แถว ระหว่าง Text File (2010-03-10)
เปรียบเทียเอาค่าที่มีใน Text File1 ที่ไม่มีใน Text File 2 ไม่ต้อง loop เทียบแล้วครับ
// Create the IEnumerable data sources.
string[] list1 = System.IO.File.ReadAllLines(@"c:/test/list1.txt");
string[] list2 = System.IO.File.ReadAllLines(@"c:/test/list2.txt");
// หาแถวที่มีใน list1 แต่ไม่อยู่ใน list2
IEnumerable<string> differenceQuery = list1.Except(list2);
// loop ค่ามาแสดงใน rich Text
foreach (string str in differenceQuery)
richTextBox1.AppendText(str+"\n"); |
อ่านต่อคลิกที่นี้
|
การอ้างถึง Control ที่อยู่ใน Master Page (2010-03-04)
พอดีน้องที่ทำงานมีเรื่องชวนให้ปวดหัว ถามคำถามนี้ขึ้นมาว่า จะอ้างถึง Control ใน Master Page ยังไง
เอาหล่ะซิ่ ไม่เคยทำซะด้วยก็เลยช่วยกันหา ได้คำตอบประมาณนี้ครับ
อันแรกนี่เป็น หน้า HTML Code ของ Master File นะครับ
<%@ Master Language="C#" AutoEventWireup="true" CodeBehind="Site1.master.cs" Inherits="WebApplication1.Site1" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>Untitled Page</title>
<asp:ContentPlaceHolder ID="head" runat="server">
</asp:ContentPlaceHolder>
</head>
<body>
<form id="form1" runat="server">
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
<div>
<asp:ContentPlaceHolder ID="ContentPlaceHolder1" runat="server">
</asp:ContentPlaceHolder>
</div>
</form>
</body>
</html>
|
อ่านต่อคลิกที่นี้
|
C# สร้าง Object ตอน Runtime โดยการระบุ ชื่อ Class และ Method (2010-03-04)
บางครั้งเราต้องการที่จะสร้าง Class ตอน Runtime โดยการระบุ เฉพาะชื่อ และ method ที่ต้องการจะเรียกตอน Runtime
ผมลองผิดลองถูกอยู่หลายวิธี อันนี้แหระครับเด็ดสุดแล้ว หรือใครมีเด็ดๆ ก็แนะนำกันมานะครับ ผมก็เพิ่งเขียน C# จริงจังไม่กี่เดือนเองครับ
ผมได้เขียนตัวอย่างการเรียกโดยใช้ Reflection ใน C# นะครับ พร้อมกันนี้ผมก็เขียน Class ที่มีการ Override Method จาก Class แม่
ซึ่งระบะ keyword virtual ไว้ (Polymophism) ยิงปืนนัดเดียวได้นกสองตัว
อันแรกเป็นคลาส Animal , Dog และ Cat ที่มีการทำ Override นะครับ
class Animal
{
public virtual String Say(String myname)
{
return "I am the animal!!!!" + "\n My name is " + myname;
}
}
class Dog : Animal
{
public override string Say(String myname)
{
return "I am a dog and " + base.Say(myname);
}
}
class Cat : Animal
{
public override string Say(String myname)
{
return "I am a cat and " + base.Say(myname);
}
} |
อ่านต่อคลิกที่นี้
|
ใครว่าใน ASP.NET ด้วย C# สร้าง control ตอน runtime ไม่ได้ (2010-03-03)
ใครว่าใน ASP.NET ด้วย C# สร้าง control ตอน runtime ไม่ได้ อ่ะทำให้ดู ก็ทุกอย่างมันเป็น Oject นี่ครับ อย่าเถียง
ไปศึกษา OO มาอีกนิดนะ หุหุ
ส่วนที่แรกเป็นส่วน ของ MyButton.cs นะครับ (เป็นคลาส ฺButton ที่ inherite มาจาก คลาส Button)
|
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
namespace ZengCodeNet
{
public class ZCBtn : Button
{
//จะ implement อะไรต่อก็ทำไปสุดแต่ใจจะปราถนาครับ ไม่ว่าจะเป็ฯ property หรือ method ต่างๆ
}
}
|
อ่านต่อคลิกที่นี้
|
C# มาลองใช้ Class Dictionary กันครับ (2010-03-02)
Dictionary/StringDictionary เป็น Collection ที่ใช้ในการรวบรวมข้อมูลของ name/value ที่มีความใกล้เคียงกัน ( โดย name/value จะคือค่า key และ item ของออบเจกต์ ) โดยออบเจกต์นี้จะคล้ายกับการใช้งาน Array เพียงแต่มีการใช้งานที่ง่าย และไม่มีฟังก์ชั่นซับซ้อนเท่า Array แต่ก็ใช้งานได้ในวงจำกัด
อันแรกนี่ Bean Class นะครับ
using System;
using System.Collections.Generic;
using System.Text;
namespace TestProgram
{
class Student
{
public string id { get; set; }
public string name { get; set; }
}
} |
อ่านต่อคลิกที่นี้
|
C# consume Oil Price จาก PTT โดยไม่ผ่าน WS Proxy ครับ (2010-02-26)
ไม่มีการ Add Web Refference (Web Service Proxy) จะใช้ HttpRequest และ HttpResponse นะครับ
|
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Net;
using System.IO;
using System.Xml;
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
//com.pttplc.www.PTTInfo a = new WindowsFormsApplication1.com.pttplc.www.PTTInfo();
//MessageBox.Show(a.GetOilPrice("thai",25,02,2553));
}
private void button2_Click(object sender, EventArgs e)
{
// String strSoapMessage = "<?xml version='1.0' encoding='utf-8'?><soap:Envelope xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:soap='http://schemas.xmlsoap.org/soap/envelope/'><soap:Body><HelloWorld xmlns='http://tempuri.org/' /></soap:Body></soap:Envelope>";
String strSoapMessage = "<?xml version='1.0' encoding='utf-8'?><soap:Envelope xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:soap='http://schemas.xmlsoap.org/soap/envelope/'><soap:Body><GetOilPrice xmlns='http://www.pttplc.com/ptt_webservice/'><Language>string</Language><DD>26</DD><MM>02</MM><YYYY>2553</YYYY></GetOilPrice></soap:Body></soap:Envelope>";
...............................................
|
อ่านต่อคลิกที่นี้
|
C# Soap Client โดยไม่ผ่าน WS Proxy (2010-02-25)
ที่ทำเช่นนี้ก็เพื่อนจะสามารถระบุ Web service และเรียก Method ได้ตอน runtime ไม่ต้องผ่าน Proxy นะครับ
String strSoapMessage = "<?xml version='1.0' encoding='utf-8'?><soap:Envelope xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:soap='http://schemas.xmlsoap.org/soap/envelope/'><soap:Body><HelloWorld xmlns='http://tempuri.org/' /></soap:Body></soap:Envelope>";
HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create("http://localhost:3421/Service1.asmx/HelloWorld");
webRequest.Headers.Add("SOAPAction", "http://localhost:3421/Service1.asmx/HelloWorld");
webRequest.ContentType = "text/xml;charset=\"utf-8\"";
webRequest.Accept = "text/xml";
webRequest.Method = "POST";
StreamWriter stm = new StreamWriter(webRequest.GetRequestStream(), Encoding.UTF8);
stm.Write(strSoapMessage);
stm.Flush();
stm.Close();
IAsyncResult asyncResult = webRequest.BeginGetResponse(null, null);
//รอจนกว่าจะตอบกลับ
asyncResult.AsyncWaitHandle.WaitOne();
// get the response
string soapResult;
using (WebResponse webResponse = webRequest.EndGetResponse(asyncResult))
using (StreamReader rd = new StreamReader(webResponse.GetResponseStream()))
{
soapResult = rd.ReadToEnd();
}
MessageBox.Show(soapResult); |
ที่ผมต้องทำอย่างนี้ก็เพราะว่าผมต้องเรียก webservice จากข้างใน DLL อ่ะครับ
อ่านต่อคลิกที่นี้
|
Run only 1 instance of program. (2010-02-19)
พอดีน้องที่ทำงานถามว่าทำยังไง ผมใช้วิธีนี้ครับ ใครใช้วิธีอื่นที่ดีกว่านี้ก็โพสบอกกันบ้างนะครับ
bool mutexCreated = false;
System.Threading.Mutex mutex = new System.Threading.Mutex(true, "ZengcodeProgram", out mutexCreated);
if (!mutexCreated)
{
MessageBox.Show("Another instance is already running.");
System.Diagnostics.Process.GetCurrentProcess().Kill();
Close();
}
อ่านต่อคลิกที่นี้
|
|
|