您好,登錄后才能下訂單哦!
WCF入門將和大家一起探討以下內容:
①WCF的基礎知識,快速創建一個WCF應用程序。
②WCF契約
③WCF服務部署的實現
④WCF的通信模式
⑤WCF的調用模式
這一節,我們了解WCF的基礎知識。
WCF就是一種面向SOA的技術,是用來構建面向服務的應用程序框架,是微軟開發的一組數據通信應用程序開發接口,可以在不同的組件、應用程序、系統之間進行通信。服務和被調用之間是一種松散的關系。服務是被動的,當對服務的請求傳入時,服務才會被調用。
這里有必要說下SOA(Service-Oriented-Architecture)面向服務的架構,主要是為了解決在Internet環境下通過連接完成特定任務的獨立功能實體實現業務集成的需求的一種軟件系統架構。可以將SOA理解成為一個組件模型,它將應用程序間不同的服務通過服務間定義好的接口和契約將它們組合起來。WCF可以實現多平臺、多協議、安全可靠、高效率的系統間的通信,只要這些系統都支持SOAP就能實現互操作。可以說WCF提供了統一的、建立安全、可靠、面向服務的高效開發平臺,同時WCF還向后兼容WebService。
WCF可以看做是.net平臺下一組服務的集合,WCF集成了ASMX(Active Server Mehtod)、WSE(Web Services Enhancements)、Remoting、Enterprise Service、MSMQ所有的功能并進行了良好的封裝,減輕了開發人員的開發難度和學習成本。開發人員不用在擔心安全、跨平臺、服務集成、消息傳輸的多個難題。
學習WCF需要具備編程基礎,尤其是對接口的理解,其實不僅是WCF,可以說接口是面向對象思想的核心。面向對象的實質可以看做是對現實的抽象,接口正式抽象的體現,CLR對此有深刻的反應,如果熟悉IL代碼的人都是interface在編譯成IL代碼是會被編譯成interface [訪問修飾符] abstract 這就是為什么在接口不能添加abstract修飾的原因,扯遠了。
我在文中提到了SOAP,SOAP(Sample Ojbect Access Protocol)簡單對象訪問協議,是交換數據的一種協議規范,是一種輕量的、簡單的、基于XML的協議,它被設計成在WEB上交換結構化的和固化的信息。說的了XML我想多說幾句,XML在.NET平臺中應用可以說無處不在如元數據的表示、系統的配置、持久化、數據交換等等,XML具有可閱讀性強、定義靈活、儲存便捷的特點,但是在現在很多系統中尤其是移動終端開發的數據交換卻不喜歡用它,鄙人也是這樣,因為XML和另一種具有同種功能的輕量級數據交換格式相比體積龐大的多,有興趣的可以研究下。
另外穩重我會還提到了WebService,這個是提供Web服務調用最為人所熟知的技術,能使得運行在不同機器上的不同應用無須借助附加的、專門的第三方軟件或硬件, 就可相互交換數據或集成。不限制語言、 平臺或內部協議, 都可以相互交換數據只要是支持SOAP就行,但是在安全性方面不是太好,當然這也只是針對安全性需求而言的,對應提供公共服務信息的服務比如天氣、新聞等等WebService是再適合不過了。
最后,要介紹下WCF的通信的模式以WCF應用層的組成,WCF是來實現現實應用中通信的要求,當然它也必須支持三種通信模式,即:
單工:就是通信只能想一個方向進行的通信模式,比如說廣播、衛星等,WCF我們稱之為單工模式。
半雙工:就是通信可以在兩個方向都進行,但是在同一時刻一方只能接收或者發送消息,比如對講機,當在WCF這個名稱有些不一樣,我們稱它為請求響應模式。
全雙工:也即是我們所說的兩個方向都能進行傳輸,并且兩個方向都能同時進行傳輸。在WCF我們稱之為異步模式。
WCF有客戶端和服務器,組成,當然則個服務器和客戶端是相對的,這個在我們后面的學習中會有所體會。
了解了WCF有關的基礎知識,我們還是來建議一個WCF的應用程序吧。
使用VS創建一個WCF的應用型如此的簡單,讓我們對WCF是否感覺到并沒什么難度,說實話,入門不難但是要開發出適合企業級應用遠非如此,在我所經歷的項目中應用WCF滿足不了器性能要求,我們最終不得不使用Apache的ActiveMQ來實現我們電文傳輸,如果有時間我愿意分享這些經驗。
第一步,新建一個WCF項目“WcfProgress”
添加“WCF應用程序”并取名“WcfProgress”
這是我們會看到幾個文件IService1.cs,這個名字以及接口可以使用重構修改成你想要的名稱,這文件就是我們說說的服務契約,其實接口本身就是一種契約。在契約中添加我們我喜歡實現的方法、屬性、數據成員等就指定好了一個契約。我在這里將接口和實現類重新命名了。
雙擊接口文件我們可以看到以下內容
// 注意: 使用“重構”菜單上的“重命名”命令,可以同時更改代碼和配置文件中的接口名“IGetSystemInfo”。
[ServiceContract]
publicinterfaceIGetSystemInfo
{
[OperationContract]
string GetData(int value);
[OperationContract]
CompositeType GetDataUsingDataContract(CompositeType composite);
// TODO: 在此添加您的服務操作
}
// 使用下面示例中說明的數據約定將復合類型添加到服務操作。
[DataContract]
public class CompositeType
{
bool bool Value = true;
string stringValue = "Hello ";
[DataMember]
public bool BoolValue
{
get { return boolValue; }
set { boolValue = value; }
}
[DataMember]
public string StringValue
{
get { return stringValue; }
set { stringValue = value; }
}
}
這里需要說明的是,[ServiceContract][OperationContract] [DataContract][DataMember]這些屬性標簽之所以可以正常使用,得益于System.ServiceModel處理類,所以用手動創建WCF應用類庫的時候我們一定不要我拿過來添加對其的應用。ServiceContract:叫做服務契約,表示這個接口是一個服務契約,IDE和編譯真是通過他來生成響應服務的。OperationContract說白了就是調用遠程方法。DataContract這是對其中中數據的定義。DataMember這是對其契中數據結構中屬性的定義。
我在其中添加了一個GetSystemTime的操作契約,那么響應的應該在實現類中添加對操作契約的具體實現。
[ServiceContract]
public interface IGetSystemInfo
{
[OperationContract]
string GetData(int value);
[OperationContract]
CompositeType GetDataUsingDataContract(CompositeType composite);
[OperationContract]
string GetSystemTime();
}
public class GetSystemInfo : IGetSystemInfo
{
public string GetData(int value)
{
return string.Format("You entered: {0}", value);
}
public CompositeType GetDataUsingDataContract(CompositeType composite)
{
if (composite == null)
{
throw new ArgumentNullException("composite");
}
if (composite.BoolValue)
{
composite.StringValue += "Suffix";
}
return composite;
}
public string GetSystemTime()
{
return System.DateTime.Now.ToString("yyyy-M-d dddd");
}
}
第二步,我們的服務端程序基本就完成了,接下來我們建立一個客服端來調用它吧。這里我們為了后面演示異步就用Winform程序了。建立一個WcfClient項目。
第三步,在客戶端添加對服務的引用。
注意如果要生成異步操作的話可以點“高級”進入“服務引用設置”勾選“生成異步操作”。
好了然后在FrmClient的call Server按鈕事件中填寫如下代碼:
private void btn_CallGetSysTime_Click(object sender, EventArgs e)
{
GetSystemServer.GetSystemInfoClient client = newGetSystemInfoClient();
MessageBox.Show(client.GetSystemTime());
}
現在我們把啟動服務,并允許窗體,查看結果。
首先,后臺啟動后會打開瀏覽器并顯示服務調用頁面的信息,如下圖所示:
客戶端則顯示如下,至此一個簡單的WCF程序就完成了。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。