前言:去年由于工作需要我學習了wcf的相關知識,初期對wcf的作用以及為何用怎么樣都是一知半解,也許現在也不是非常的清晰。但是通過項目對wcf的運用在腦海里面也算有了初步的模型。今天我就把我從開始wcf所遇到的困難以及解決方案一點點記下來,可能還有很多不足之處那我們一起共同學習。在學習之前我們有必要初步的看下百度百科對wcf的解釋,讓我們心中有這一個概念,然后建立項目,然后再次看概念,然后在去更深層的建立項目,然后再去理解這樣反復的去做我相信可以做好wcf。那么下面我就會從初識wcf,wcf消息協定,文件傳輸,聊天室,wcf和socket的聯合運用來寫。不好之處大家提出來 我進行修正。
第一步:創建一個解決方案
創建一個解決方案我們需要創建4個類庫
IService:契約層(也就是我們常說的接口層)
Service:服務層(實現契約層)
Hosting:服務端(可以理解為服務器)
Client:客戶端(請求調用)
第二步:創建接口層
1 /// <summary> 2 /// 服務契約 3 /// </summary> 4 [ServiceContract] 5 public interface IWcfService 6 { 7 /// <summary> 8 /// 測試wcf方法 9 /// </summary>10 /// <param name="Name">請求用戶名</param>11 /// <returns></returns>12 [OperationContract]13 string TestMethod(string Name);14 }
注釋1:[ServiceContract] 這個表示一種特性,告訴編譯器該類型屬于服務契約,同理[OperationContract] 告訴編譯器該類型屬于操作契約
注釋2:記得引用ServiceModel
第三步:實現接口層
1 public class WcfService:IService.Interface.IWcfService2 {3 public string TestMethod(string Name)4 {5 return "Hello 我是:" + Name;6 }7 }
第四步:實現服務端
1 static void Main(string[] args) 2 { 3 Uri baseadress = new Uri("http://localhost:8080/"); 4 using (ServiceHost host = new ServiceHost(typeof (WcfService), baseadress)) 5 { 6 WSHttpBinding binding = new WSHttpBinding(); //綁定 7 binding.Security.Mode = SecurityMode.None; 8 host.AddServiceEndpoint(typeof(IWcfService), binding, ""); 9 ServiceMetadataBehavior mdBehavior = new ServiceMetadataBehavior()10 {11 HttpGetEnabled = true12 };13 host.Description.Behaviors.Add(mdBehavior);14 host.Opened += delegate15 {16 Console.WriteLine("服務啟動");17 };18 try19 {20 host.Open();21 }22 catch (Exception ep)23 {24 Console.WriteLine(ep.Message);25 host.Abort();26 host.Close();27 }28 Console.ReadKey(); 29 } 30 }
注釋3:Uri baseadress=new Uri("http://localhost:8080/") baseadress表示一個基址(絕對地址) 區別于終結點地址(相對地址) 而最終地址是由(基址+終結點地址組成)
注釋4:什么是終結點
終結點有三部分組成簡稱叫做ABC,A表示Address,B表示Binding,C表示Contract。
Address:終結點地址,就是相對地址,比喻現在終結點地址是“admin”,那么地址就會是http://localhost:8080/admin。當然也可以默認“”,根據自己實際情況作出決定
Binding:指定如何與終結點進行通信 包括這三種模式 傳輸協議(比喻TCP或HTTP) 消息文本(比喻2進制) 安全模式(SSL 或 SOAP )
Contract:就是我們自己定下的契約(就是接口)
注釋5:
ServiceMetadataBehavior mdBehavior = new ServiceMetadataBehavior()
{
HttpGetEnabled = true
};
這句話的目的:為了能讓客戶端通過添加服務能找到這個服務所以對主機進行描述(沒有這句話無法通過基址找到服務端)
第五步:運行服務端,客戶端尋找基址
尋找基址
客戶端運行結果:
這樣第一篇關于wcf就介紹完畢了。
新聞熱點
疑難解答