一、概述windows communication foundation(wcf)是由微軟發展的一組資料通訊的應用程式開發介面,可以翻譯為windows通訊介面,它是.net框架的一部分。由 .net framework
3.0開始引入。
wcf的最終目標是通過程序或不同的系統、通過本地網路或是通過internet收發客戶和服務之間的訊息。
wcf合併了web服務、.net remoting、訊息佇列和enterprise services的功能並整合在visual studio中。
wcf專門用於面向服務開發。
二、基於asp.net 的應用程式開發與面向服務開發
在基於asp.net 的應用程式開發中,我們由客戶機的瀏覽器訪問應用程式伺服器,然後通過應用程式伺服器中的資料庫連線去連線資料庫伺服器,讀取或是運算元據,有時候可能會多乙個檔案伺服器。大家可以觀察到,基本上所有的應用都放在了一台伺服器上,但對於乙個,由於業務上的需要(如:與外部系統互動),一台伺服器很難支援所有的應用。我們再看下面的圖:
客戶機使用瀏覽器訪問伺服器a,伺服器a為了業務需要與其他各種應用部署在伺服器b、c、d....再通過wcf技術互相通訊,相互訪問...然而面向服務的好處不僅僅在此,他還提供了不同語言不同作業系統的可互動性..由於本文不是介紹soa的文章,感興趣的同學可以參見:soa
三、第乙個wcf程式 1
. 新建立空白解決方案,並在解決方案中新建專案,專案型別為:wcf服務應用程式。建立完成後如下圖所示:
2.刪除系統生成的兩個檔案iservice1.cs與service1.svc。 3
.新增自定義的wcf【服務檔案】user.svc,此時vs2010會自動生成wcf介面檔案iuser.cs,我們在iuser中定義wcf方法showname,在user.svc.cs對該介面的方法進行實現。
**如下: 1
using
system.servicemodel; 2
3namespace
wcfservice 4
11}1213
14namespace
wcfservice15"
, name);
21return
wcfname;22}
23}24}
大家可以看到,在wcf中的介面與普通介面的區別只在於兩個上下文,其他的和我們正常學習的介面一樣。定義這個上下文要新增system.servicemodel的引用。
[servicecontract],來說明介面是乙個wcf的介面,如果不加的話,將不能被外部呼叫。
[operationcontract],來說明該方法是乙個wcf介面的方法,不加的話同上。
此時我們的第乙個wcf服務程式就建立好了,將user.svc「設為起始頁」,然後f5執行一下試試,如下圖所示,vs2010自動呼叫了wcf的客戶端測試工具以便我們測試程式:
我們雙擊上圖中的 showname() 方法,出現如下圖:
在請求視窗中的值中輸入引數「你的姓名」,然後點選「呼叫」,在響應視窗中會出現返回值「wcf服務,顯示姓名:你的姓名」,說明測試成功,點選下面的xml也可以看到xml的資料傳輸。我們現在建立好了服務的應用程式和業務邏輯,即非常簡單的列印姓名的方法,測試也成功了。那麼我們怎麼用呢?
四、場景
我們設計的場景是在生產中經常應用的場景,把wcf程式寄宿在iis之上。假設場景如下:a伺服器和b伺服器。我們把我們剛剛建立的wcf程式「部署」在b伺服器上(本教程的a,b伺服器都放是我自己的一台機器),我們的目標是在a伺服器的應用程式來訪問b伺服器的wcf程式,實現伺服器端的應用程式通訊。
五、將wcf程式寄宿在b伺服器的iis之上
首先我們將wcf應用程式發布一下,然後部署在b伺服器的iis之上,如下圖所示:
滑鼠右鍵瀏覽uesr.svc,在遊覽器**現如下圖所示,說明服務部署成功。
上圖中的http:
//localhost/user.svc?wsdl即為我們要引用的服務位址。
六、在客戶端[a伺服器]建立服務的引用
新建解決方案,並且建立asp.net web應用程式的專案。命名為:wcfclient,如下圖所示:
(1)新建asp.net頁面,命名為:wcftest.aspx。
(2)新增在第五步中部署的服務的引用。如下圖所示:
此時彈出新增服務引用的窗體,如下圖所示:
我們在位址裡寫上我們寄宿在iis上的wcf服務的位址服務路徑,此處為:http:
//localhost/user.svc?wsdl,在命名空間處填寫wcfservice[此命名空間要在下面的客戶端中引用]然後點選「前往」-->「確定」按鈕。此時我們完成了對服務的引用。我們再次檢視解決方案,裡面多了service references的資料夾,通過資源管理器開啟後裡面多了些檔案,這些檔案用於客戶端向服務端的呼叫,現在先不用管他。
七、使用wcf服務端的方法
wcftest.aspx的**如下: 1
c#" autoeventwireup="
true
" codebehind="
wcftest.aspx.cs
" inherits="
wcfclient.wcftest
" %> 23
"-//w3c//dtd xhtml 1.0 transitional//en""
"> 4"
">
58913
1415
16using
system;
17using
system.collections.generic;
18using
system.linq;
19using
system.web;
20using
system.web.ui;
21using
system.web.ui.webcontrols;
2223
//引用wcf服務的命名空間
24using
wcfclient.wcfservice;
2526
namespace
wcfclient
2734
35protected
void btnclick(object
sender, eventargs e)
3641}42
} 上面中的userclient類是在新增引用的時候生成的服務端user類的客戶端**類,一般客戶端**類名稱都會是**client。我們執行一下看下效果。
通過以上的例子,我們完成了由a伺服器的應用向b伺服器中wcf提供的方法的呼叫。這個例子比較簡單,對於經常開發b/s結構應用程式的同學們來說比較好理解。
無廢話ExtJs 入門教程十九 API的使用
首先解釋什麼是 api extjs的api必須部署到iis上,extjs的api首頁如下圖所示 左側是搜尋欄,可以搜尋所有的ext的元件,如上圖所示,我搜尋的是box,下面自動觸發搜尋出了包含box的元件。1,config options 配置項 1 ext.onready function 7 s...
WCF入門教程 WCF基礎知識問與答
3 為什麼我們要選用wcf?在windows平台下,尤其是在.net平台下開發面向服務的應用程式,或者開發分布式系統,最佳選擇就是wcf。為什麼呢?原因就在於wcf涵蓋了之前微軟推出的所有用於分布式開發的技術,包括remoting web services wse msmq等,並以一種統一的程式設計...
WCF入門教程1 WCF簡要介紹
什麼是wcfwindowscommunication foundation wcf 是由微軟 開發的一系列支援資料通訊的應用程式框架,可以翻譯為windows 通訊開發平台。整合了原有的windows通訊的 net remoting,webservice,socket的機制,並融合有http 和ft...