新聞中心
WCF入門將和大家一起探討以下內(nèi)容:
公司主營業(yè)務(wù):網(wǎng)站建設(shè)、網(wǎng)站設(shè)計、移動網(wǎng)站開發(fā)等業(yè)務(wù)。幫助企業(yè)客戶真正實現(xiàn)互聯(lián)網(wǎng)宣傳,提高企業(yè)的競爭能力。成都創(chuàng)新互聯(lián)公司是一支青春激揚、勤奮敬業(yè)、活力青春激揚、勤奮敬業(yè)、活力澎湃、和諧高效的團隊。公司秉承以“開放、自由、嚴(yán)謹(jǐn)、自律”為核心的企業(yè)文化,感謝他們對我們的高要求,感謝他們從不同領(lǐng)域給我們帶來的挑戰(zhàn),讓我們激情的團隊有機會用頭腦與智慧不斷的給客戶帶來驚喜。成都創(chuàng)新互聯(lián)公司推出友誼免費做網(wǎng)站回饋大家。
①WCF的基礎(chǔ)知識,快速創(chuàng)建一個WCF應(yīng)用程序。
②WCF契約
③WCF服務(wù)部署的實現(xiàn)
④WCF的通信模式
⑤WCF的調(diào)用模式
這一節(jié),我們了解WCF的基礎(chǔ)知識。
WCF就是一種面向SOA的技術(shù),是用來構(gòu)建面向服務(wù)的應(yīng)用程序框架,是微軟開發(fā)的一組數(shù)據(jù)通信應(yīng)用程序開發(fā)接口,可以在不同的組件、應(yīng)用程序、系統(tǒng)之間進行通信。服務(wù)和被調(diào)用之間是一種松散的關(guān)系。服務(wù)是被動的,當(dāng)對服務(wù)的請求傳入時,服務(wù)才會被調(diào)用。
這里有必要說下SOA(Service-Oriented-Architecture)面向服務(wù)的架構(gòu),主要是為了解決在Internet環(huán)境下通過連接完成特定任務(wù)的獨立功能實體實現(xiàn)業(yè)務(wù)集成的需求的一種軟件系統(tǒng)架構(gòu)??梢詫OA理解成為一個組件模型,它將應(yīng)用程序間不同的服務(wù)通過服務(wù)間定義好的接口和契約將它們組合起來。WCF可以實現(xiàn)多平臺、多協(xié)議、安全可靠、高效率的系統(tǒng)間的通信,只要這些系統(tǒng)都支持SOAP就能實現(xiàn)互操作??梢哉fWCF提供了統(tǒng)一的、建立安全、可靠、面向服務(wù)的高效開發(fā)平臺,同時WCF還向后兼容WebService。
WCF可以看做是.net平臺下一組服務(wù)的集合,WCF集成了ASMX(Active Server Mehtod)、WSE(Web Services Enhancements)、Remoting、Enterprise Service、MSMQ所有的功能并進行了良好的封裝,減輕了開發(fā)人員的開發(fā)難度和學(xué)習(xí)成本。開發(fā)人員不用在擔(dān)心安全、跨平臺、服務(wù)集成、消息傳輸?shù)亩鄠€難題。
學(xué)習(xí)WCF需要具備編程基礎(chǔ),尤其是對接口的理解,其實不僅是WCF,可以說接口是面向?qū)ο笏枷氲暮诵?。面向?qū)ο蟮膶嵸|(zhì)可以看做是對現(xiàn)實的抽象,接口正式抽象的體現(xiàn),CLR對此有深刻的反應(yīng),如果熟悉IL代碼的人都是interface在編譯成IL代碼是會被編譯成interface [訪問修飾符] abstract 這就是為什么在接口不能添加abstract修飾的原因,扯遠了。
我在文中提到了SOAP,SOAP(Sample Ojbect Access Protocol)簡單對象訪問協(xié)議,是交換數(shù)據(jù)的一種協(xié)議規(guī)范,是一種輕量的、簡單的、基于XML的協(xié)議,它被設(shè)計成在WEB上交換結(jié)構(gòu)化的和固化的信息。說的了XML我想多說幾句,XML在.NET平臺中應(yīng)用可以說無處不在如元數(shù)據(jù)的表示、系統(tǒng)的配置、持久化、數(shù)據(jù)交換等等,XML具有可閱讀性強、定義靈活、儲存便捷的特點,但是在現(xiàn)在很多系統(tǒng)中尤其是移動終端開發(fā)的數(shù)據(jù)交換卻不喜歡用它,鄙人也是這樣,因為XML和另一種具有同種功能的輕量級數(shù)據(jù)交換格式相比體積龐大的多,有興趣的可以研究下。
另外穩(wěn)重我會還提到了WebService,這個是提供Web服務(wù)調(diào)用最為人所熟知的技術(shù),能使得運行在不同機器上的不同應(yīng)用無須借助附加的、專門的第三方軟件或硬件, 就可相互交換數(shù)據(jù)或集成。不限制語言、 平臺或內(nèi)部協(xié)議, 都可以相互交換數(shù)據(jù)只要是支持SOAP就行,但是在安全性方面不是太好,當(dāng)然這也只是針對安全性需求而言的,對應(yīng)提供公共服務(wù)信息的服務(wù)比如天氣、新聞等等WebService是再適合不過了。
最后,要介紹下WCF的通信的模式以WCF應(yīng)用層的組成,WCF是來實現(xiàn)現(xiàn)實應(yīng)用中通信的要求,當(dāng)然它也必須支持三種通信模式,即:
單工:就是通信只能想一個方向進行的通信模式,比如說廣播、衛(wèi)星等,WCF我們稱之為單工模式。
半雙工:就是通信可以在兩個方向都進行,但是在同一時刻一方只能接收或者發(fā)送消息,比如對講機,當(dāng)在WCF這個名稱有些不一樣,我們稱它為請求響應(yīng)模式。
全雙工:也即是我們所說的兩個方向都能進行傳輸,并且兩個方向都能同時進行傳輸。在WCF我們稱之為異步模式。
WCF有客戶端和服務(wù)器,組成,當(dāng)然則個服務(wù)器和客戶端是相對的,這個在我們后面的學(xué)習(xí)中會有所體會。
了解了WCF有關(guān)的基礎(chǔ)知識,我們還是來建議一個WCF的應(yīng)用程序吧。
使用VS創(chuàng)建一個WCF的應(yīng)用型如此的簡單,讓我們對WCF是否感覺到并沒什么難度,說實話,入門不難但是要開發(fā)出適合企業(yè)級應(yīng)用遠非如此,在我所經(jīng)歷的項目中應(yīng)用WCF滿足不了器性能要求,我們最終不得不使用Apache的ActiveMQ來實現(xiàn)我們電文傳輸,如果有時間我愿意分享這些經(jīng)驗。
第一步,新建一個WCF項目“WcfProgress”


添加“WCF應(yīng)用程序”并取名“WcfProgress”
這是我們會看到幾個文件IService1.cs,這個名字以及接口可以使用重構(gòu)修改成你想要的名稱,這文件就是我們說說的服務(wù)契約,其實接口本身就是一種契約。在契約中添加我們我喜歡實現(xiàn)的方法、屬性、數(shù)據(jù)成員等就指定好了一個契約。我在這里將接口和實現(xiàn)類重新命名了。
雙擊接口文件我們可以看到以下內(nèi)容
// 注意: 使用“重構(gòu)”菜單上的“重命名”命令,可以同時更改代碼和配置文件中的接口名“IGetSystemInfo”。
[ServiceContract]
publicinterfaceIGetSystemInfo
{
[OperationContract]
string GetData(int value);
[OperationContract]
CompositeType GetDataUsingDataContract(CompositeType composite);
//TODO: 在此添加您的服務(wù)操作
}
// 使用下面示例中說明的數(shù)據(jù)約定將復(fù)合類型添加到服務(wù)操作。
[DataContract]
publicclassCompositeType
{
bool bool Value =true;
string stringValue ="Hello ";
[DataMember]
publicbool BoolValue
{
get {return boolValue; }
set { boolValue =value; }
}
[DataMember]
publicstring StringValue
{
get {return stringValue; }
set { stringValue =value; }
}
}
這里需要說明的是,[ServiceContract][OperationContract] [DataContract][DataMember]這些屬性標(biāo)簽之所以可以正常使用,得益于System.ServiceModel處理類,所以用手動創(chuàng)建WCF應(yīng)用類庫的時候我們一定不要我拿過來添加對其的應(yīng)用。ServiceContract:叫做服務(wù)契約,表示這個接口是一個服務(wù)契約,IDE和編譯真是通過他來生成響應(yīng)服務(wù)的。OperationContract說白了就是調(diào)用遠程方法。DataContract這是對其中中數(shù)據(jù)的定義。DataMember這是對其契中數(shù)據(jù)結(jié)構(gòu)中屬性的定義。
我在其中添加了一個GetSystemTime的操作契約,那么響應(yīng)的應(yīng)該在實現(xiàn)類中添加對操作契約的具體實現(xiàn)。
[ServiceContract]
publicinterfaceIGetSystemInfo
{
[OperationContract]
string GetData(int value);
[OperationContract]
CompositeType GetDataUsingDataContract(CompositeType composite);
[OperationContract]
string GetSystemTime();
}
publicclassGetSystemInfo :IGetSystemInfo
{
publicstring GetData(int value)
{
returnstring.Format("You entered:{0}", value);
}
publicCompositeType GetDataUsingDataContract(CompositeType composite)
{
if (composite ==null)
{
thrownewArgumentNullException("composite");
}
if (composite.BoolValue)
{
composite.StringValue +="Suffix";
}
return composite;
}
publicstring GetSystemTime()
{
return System.DateTime.Now.ToString("yyyy-M-d dddd");
}
}
第二步,我們的服務(wù)端程序基本就完成了,接下來我們建立一個客服端來調(diào)用它吧。這里我們?yōu)榱撕竺嫜菔井惒骄陀肳inform程序了。建立一個WcfClient項目。
第三步,在客戶端添加對服務(wù)的引用。
注意如果要生成異步操作的話可以點“高級”進入“服務(wù)引用設(shè)置”勾選“生成異步操作”。
好了然后在FrmClient的call Server按鈕事件中填寫如下代碼:
privatevoid btn_CallGetSysTime_Click(object sender,EventArgs e)
{
GetSystemServer.GetSystemInfoClient client =newGetSystemInfoClient();
MessageBox.Show(client.GetSystemTime());
}
現(xiàn)在我們把啟動服務(wù),并允許窗體,查看結(jié)果。
首先,后臺啟動后會打開瀏覽器并顯示服務(wù)調(diào)用頁面的信息,如下圖所示:
客戶端則顯示如下,至此一個簡單的WCF程序就完成了。
網(wǎng)頁標(biāo)題:WCF入門(一)WCF的基礎(chǔ)知識
網(wǎng)頁鏈接:http://fisionsoft.com.cn/article/gppegs.html