上一遍到現在已經有一段時間了,先向關注本文的各位“挨踢”同仁們道歉了。小生自認為一個ITer如果想要做的更好,就需要將自己的所學、所用積極分享出來,接收大家的指導和吐槽。網上也有很多WCF相關的教程,但也有很多看完后讓人一種“不知所雲”的感覺。小生計划3月到4月吧WCF系列更新完,希望大家小小支持一下!
言歸正傳,小生在Console Application, Windows Forms Application, Web Application以及ASP.NET MVC中都進行了調用測試,調用方法基本相似,沒有特殊的地方。下面就用WCF作為服務和其他Project進行結合使用(以VS2012為例)
1、創建WCF Service Application項目:
命名為:WcfServiceDemo. 創建后會出現WCF項目
其中:IService1是MS的自帶示例,下面再來添加一個Service class : ServiceDemo.
在ServiceDemo中加一些測試的方法,例如:string TestMethodStr(int i); int TestMethodInt(int i); double TestMethodDou(int i,int j);所示:
IServiceDemo代碼如下:
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Runtime.Serialization; 5 using System.ServiceModel; 6 using System.Text; 7 8 namespace WcfServiceDemo 9 { 10 // 注意: 使用“重構”菜單上的“重命名”命令,可以同時更改代碼和配置文件中的接口名“IServiceDemo”。 11 [ServiceContract] 12 public interface IServiceDemo 13 { 14 [OperationContract] 15 String TestMethodStr(int i); 16 17 [OperationContract] 18 Int32 TestMethodInt(int i); 19 20 [OperationContract] 21 Double TestMethodDou(int i, int j); 22 } 23 }
ServiceDemo實現接口,代碼如下:
using System; using System.Collections.Generic; using System.Linq; using System.Runtime.Serialization; using System.ServiceModel; using System.Text; namespace WcfServiceDemo { // 注意: 使用“重構”菜單上的“重命名”命令,可以同時更改代碼和配置文件中的類名“ServiceDemo”。 public class ServiceDemo : IServiceDemo { public String TestMethodStr(int i) { return "param is:" + i; } public Int32 TestMethodInt(int i) { return i; } public Double TestMethodDou(int i, int j) { return i / j; } } }
由於代碼都非常簡單,所以就沒有增加注釋了。
再發布之前,可以先利用WCF測試客戶端進行測試:
前面TestMethodStr()和TestMethodInt()得出的值都沒有問題,但是TestMethodDou()得出了0,這是因為類型轉換的問題。也是正確的。
2、發布Wcf項目
Rebuild項目,然后public。得到發布的源碼:
將上面的文件代碼部署到本機IIS中,IIS部署具體方法就不介紹了,如果有什么問題可留言,打開部署所在地,這邊以我本地的IIS為例。
部署時,請將應用池改為如果,瀏覽時,出現權限問題,則需要增加“IIS_IUSERS”和“NETWORK SERVICE”的完全控制權限(可能不都需要,但是我一般都會選擇)
再次運行,則出現證明部署成功!
點擊“WcfServiceDemo.ServiceDemo.svc”,可以看到ServiceDemo服務的信息,如下圖所示:
紅框中的地址就是我們需要調用的地址。
3、創建Condole Application項目:WCFConsole Project(即宿主)
右擊引用,點擊服務引用:
在地址欄處,輸入ServiceDemo服務的svcutil.exe地址,點擊轉到,則會顯示出其對應的WCF接口。這里命名空間改為“ServiceReferenceDemo”點擊確定。則可以在引用目錄下看到已經添加的Service References.
在Main函數中,寫入測試代碼:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using WCFConsole.ServiceReferenceDemo; namespace WCFConsole { class Program { static void Main(string[] args) { ServiceDemoClient client = new ServiceDemoClient(); Console.WriteLine(client.TestMethodInt(1)); Console.WriteLine(client.TestMethodStr(1)); Console.WriteLine(client.TestMethodDou(1, 2)); Console.ReadLine(); client.Close(); } } }
其中client.Close()寫不寫都可以,服務請求都會有一個周期,過了這個周期就會自動關閉,但最好還是手動進行close()。
執行結果如下:
測試通過。。。
其他里面調用其實和控制台應用程序調用完全一致,沒有什么特別的地方。這節主要是說明如何去調用,在這個例子中其實就是添加了“服務引用”。希望能幫助剛剛接觸的ITer。
4、后話
這節比較簡單,如果有什么出錯或者不完善的地方,希望大家能夠多多指導小生,小生也會繼續努力!如果各位有疑問或者指教,請留言或者加群225109172,對MVC、WCF等方面的問題都可以進行學習、交流。
