? 此篇文章部分是從大佬http://www.cnblogs.com/iamlilinfeng/archive/2012/09/25/2700049.html這里復制來的,首先使大家對wcf有一個初步的印象,然后根據具體內容,進行深入分析。
?
一、概述
?
Windows Communication Foundation(WCF)是由微軟發展的一組數據通信的應用程序開發接口,可以翻譯為Windows通訊接口,它是.NET框架的一部分。由 .NET Framework 3.0 開始引入。
wcf服務是什么。?
WCF的最終目標是通過進程或不同的系統、通過本地網絡或是通過Internet收發客戶和服務之間的消息。
?
WCF合并了Web服務、.net Remoting、消息隊列和Enterprise Services的功能并集成在Visual Studio中。
?
WCF專門用于面向服務開發。
cf攻略技巧、?
二、基于Asp.net 的應用程序開發與面向服務開發
?
?
在基于Asp.net 的應用程序開發中,我們由客戶機的瀏覽器訪問應用程序服務器,然后通過應用程序服務器中的數據庫連接去連接數據庫服務器,讀取或是操作數據,有時候可能會多一個文件服務器。大家可以觀察到,基本上所有的應用都放在了一臺服務器上,但對于一個,由于業務上的需要(如:與外部系統交互),一臺服務器很難支持所有的應用。我們再看下面的圖:
cf一些基本知識,?
?
客戶機使用瀏覽器訪問服務器A,服務器A為了業務需要與其他各種應用部署在服務器B、C、D....再通過WCF技術互相通信,相互訪問...然而面向服務的好處不僅僅在此,他還提供了不同語言不同操作系統的可交互性..
????
?
cfm攻略、???? 三、wcf寄宿
???? wcf程序需要寄宿到其他應用程序上運行。比如,我有一個控制臺程序,我的wcf服務寄宿在這個控制臺程序上,當我的控制臺程序未啟動時,我的WCF服務是無法啟動的。當我控制臺程序處于運行狀態時,我的WCF服務才能運行。wcf的寄宿方式有很多種,
比如寄宿到IIS,寄宿到WINDOWS服務,寄宿到控制臺程序等等。不過這些寄宿的方式和原理基本是一致的,可能IIS寄宿稍微有點不同,但大體是一致的,后續會跟大家詳細講解
???
???? 四、寄宿于IIS的簡單WCF服務
??????? 首先創建一個wcf應用程序。
wcf金點標準,?????????????????????????????????????????????????????????????????????
?
??????? ?我們看到這里生成了幾個文件,這幾個文件有什么作用呢?首先看到有個.SVC文件,我們知道,每一個ASP.NET Web服務都具有一個.asmx文本文件,客戶端通過訪問.asmx文件實現對相應Web服務的調用。與之類似,每個WCF服務也具有一個對應的文本文件,其文件擴展名為.svc。基于IIS的服務寄宿要求相應的WCF服務具有相應的.svc文件,.svc文件部署于IIS站點中,對WCF服務的調用體現在對.svc文件的訪問上。換句話說,因為我們的服務會寄宿在IIS上,IIS通過訪問這個SVC文件,來找到你相應的服務信息,供客戶端調用。這里就不貼圖了,大家可以自己在自己的工程里看。
? 創建一個wcf服務需要幾個步驟,
?1.創建服務契約
?2.實現服務內容
wcf文斯莫克。?3.創建服務宿主
?4.客戶端調用服務
?
???????????????????????????????????????????????????????????????????????????????????????????? ???
?????? 首先我們來把IService1.cs和Service1.svc.cs這兩個文件里命名空間中的內容全部刪除,然后,我們自己手寫一下。1.我們看到這個服務契約,其實實際上除了加了兩個特性【servicecontract】和【operationcontract】和普通的接口沒啥區別。2.我們看到實現這個服務內容,跟普通的寫方法沒區別。3.我們打開.SVC文件,將其指令內容改成與我們現在服務相匹配的,讓IIS能獲取服務相關的信息,完成寄宿。4.服務調用,我們先把.SVC文件設置為起始頁,然后按F5看一下。
?
dnf出血紋章。???????????????????????????????????????????????????????????????????????????????????????????????
???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? (1)
?
?
??????????????????????????????????????????????????????????????????????????????????????????????
?
??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? (2)
?
???????????????????????????????????????????????????????????????????????????????????????????????????????????????
?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? (3)??
???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? (4)
?????????????????通過WCF客戶端測試工具,我們發現我們服務端的WCF已經編寫好了可以調用了。那么我們客戶端怎么處理呢?既然我們之前說寄宿程序要一直運行,WCF才能被調用。那么我們現在就把之前寫好的WCF服務端發布到IIS,這樣IIS就是宿主,我們的WCF程序就寄宿到IIS上了。發布后點擊SVC文件,再點擊svcutil.exe 旁的鏈接,出現一個很多的XML的頁面。這些xml節點好像是叫做元數據,忘了。那么這些節點有什么用呢?其實他們是我們剛寫的那個WCF服務的元數據信息,類似于這整個服務的一種描述吧。WCF是通過soap通信的,但soap是個什么東西呢?跟這個XML有關,后續再相信跟大家解釋。
?????????????????????????????????????????????????????????????????????????????????????????????
?
?
?????????????????????????????????????????????????????????????????????????????????????????????????????????????? ?
????????????????出現XML頁面證明你的服務已經發布成功了,下面我們創建一個控制臺應用程序,然后在這個程序里點擊添加服務引用,輸入的地址就是這個XML頁面的地址。然后點擊轉到,這里命名空間,想改就改,不想改也無所謂。
??????????????????????????????????????????????????????????????????????????????????????????????????????????????
????? ?? 然后我們編寫代碼,然后就可以調用這個服務了。我們看到我們引用服務后,在這個ServiceReveerence1的命名空間下,VS幫我們自動創建了一個服務客戶端。其實這個客戶端的本質是一個繼承自ClientBase的服務調用代理對象。而ClientBase本質上也是通過channel來進行通信調用的。
下一章,我們的自我寄宿中將講到這部分內容,而且客戶端的調用將也會自己手寫。
static void Main(string[] args){ServiceReference1.PersonClient Gy = new ServiceReference1.PersonClient();Console.WriteLine(Gy.sayHello("Gy", 23));Console.ReadKey();}
運行結果:
?????????????????????????????????
?? 原本寫了一半沒保存,又寫了一遍,頭皮發麻啊,如果大家打算深入學習這些,可以參考大佬artech: http://www.cnblogs.com/artech/archive/2007/09/15/893838.html,或者這個攜程大牛,色情博主的博客:http://www.cnblogs.com/huangxincheng/p/4573556.html。看了下他們的博客,真的倍受打擊,感覺自己小菜鳥,而且真的受益匪淺。
?
?
?
?
?
?
?
?
??????????????????????????????????????????????????????????????????????????????????????????
???
?