傳說中的WCF(1):這東西難學(xué)嗎?
WCF難學(xué)嗎?
是啊,這問題估計(jì)很多人都會(huì)問,也包括阿拉在內(nèi),也有此深刻而嚴(yán)重的凝問。
也有人說:“如何某項(xiàng)技術(shù)可以化繁為簡(jiǎn),學(xué)起來輕松一點(diǎn)就好了。”也許,人類開生就擺脫不了一種習(xí)性——懶惰;不過,也有人認(rèn)為,很多時(shí)候,人們是不是總喜歡把簡(jiǎn)單的事情復(fù)雜化,那么,很多人都覺得很復(fù)雜的WCF算不算被人們“神話”了呢?
這個(gè)問題,我不作回答,現(xiàn)在我們要做一件事,一起來跟著我的步驟,寫一個(gè)程序再說。
這個(gè)解決方案中包含兩個(gè)項(xiàng)目,一個(gè)叫Server,另一個(gè)叫Client,天生一對(duì)。
1、啟動(dòng)VS 2010,推薦用2010以上版本(2012 RC版也行),因?yàn)樵礁甙姹驹胶糜茫詈肊xpress的,不要錢,我天天用。
2、新建兩個(gè)控制臺(tái)項(xiàng)目,不用我教你了吧,建完后,你的VS應(yīng)該和下圖所示的差不多。

3、在“解決方案資源管理器”上,找到解決方案節(jié)點(diǎn),在其上右擊,從彈出的菜單中選擇“屬性”。

4、在彈出的窗口,在“啟動(dòng)項(xiàng)目”中選擇“當(dāng)前選定的內(nèi)容”,如下圖所示。

這樣做,是為了在啟動(dòng)調(diào)試時(shí)更方便,你可以不設(shè)置。呵呵。
5、選中“Server”項(xiàng)目,不要弄錯(cuò)了,一般來說,我們是先完成服務(wù)器端。
在Server項(xiàng)目的“引用”上右擊,從快捷菜單中選擇“添加引用...”,在隨后打開的窗口中,確認(rèn)選定.NET選項(xiàng)卡,在列表中找到System.ServiceModel,然后,單擊確定,這個(gè)不用我介紹了。

6、打開Server項(xiàng)目的Program.cs文件,首先,要引入幾個(gè)可能要用到的命名空間
using System.ServiceModel; using System.ServiceModel.Description;
7、定義一個(gè)服務(wù)協(xié)定,其中包含一個(gè)TestMethod方法,服務(wù)協(xié)定是一個(gè)接口。
[ServiceContract]
public interface IService
{
[OperationContract]
string TestMethod();
}
9、在Main入口點(diǎn)中定義服務(wù)器相關(guān)的參數(shù),并啟動(dòng)服務(wù)。
static void Main(string[] args)
{
// 基址URI,必須,HTTP方案
Uri baseURI = new Uri("http://localhost:8008/Service");
using (ServiceHost host = new ServiceHost(typeof(MyService),baseURI))
{
// 向服務(wù)器添終結(jié)點(diǎn)
WSHttpBinding binding = new WSHttpBinding();
// 這里不需要安全驗(yàn)證
binding.Security.Mode = SecurityMode.None;
host.AddServiceEndpoint(typeof(IService), binding, "my");
// 為了能讓VS生成客戶端代碼,即WSDL文檔,故要添加以下行為
ServiceMetadataBehavior mdBehavior = new ServiceMetadataBehavior()
{
HttpGetEnabled = true
};
host.Description.Behaviors.Add(mdBehavior);
//如果服務(wù)順利啟動(dòng),則提示,處理Opened事件
host.Opened += (sender, e) => Console.WriteLine("服務(wù)已啟動(dòng)。");
// 啟動(dòng)服務(wù)器
try
{
host.Open();
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
// 為了讓程序不往下執(zhí)行而結(jié)束,故加上這句
Console.ReadKey();
// 關(guān)閉服務(wù)器
host.Close();
}
}
這時(shí)候,先確認(rèn)Server項(xiàng)目是當(dāng)前選定項(xiàng)目,然后運(yùn)行,如果成功,你會(huì)看到如下圖所示的內(nèi)容。

好了,服務(wù)器端我們就完成了,下面輪到客戶端。
這個(gè)就簡(jiǎn)單了,先找到Server所在的 \bin\debug 目錄,運(yùn)行Server.exe,確保服務(wù)成功啟動(dòng)。
選定Client項(xiàng)目,在“引用”上右擊,從快捷菜單中選擇“添加服務(wù)引用”

在彈出的窗口中輸入剛才定義的基址,即http://localhost:8008/Service,記住,一定要用基址,就是創(chuàng)建ServiceHost實(shí)例時(shí)用的那個(gè),不要用終結(jié)點(diǎn)地址。
單擊“前往”按鈕,服務(wù)讀取正確后,輸入你要的命名空間名字,單擊確定。

這時(shí)候,我們就可以在客戶端寫代碼了,
static void Main(string[] args)
{
WS.ServiceClient client = new WS.ServiceClient();
Console.WriteLine(client.TestMethod());
Console.ReadKey();
}
運(yùn)行一下,我們的第一個(gè)WCF應(yīng)用程序就完成了。


浙公網(wǎng)安備 33010602011771號(hào)