我們一起學習WCF 第一篇初識WCF(附源碼供對照學習)


     前言:去年由於工作需要我學習了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     }
IWcfService

注釋1:[ServiceContract] 這個表示一種特性,告訴編譯器該類型屬於服務契約,同理[OperationContract] 告訴編譯器該類型屬於操作契約

注釋2:記得引用ServiceModel

第三步:實現接口層

1 public class WcfService:IService.Interface.IWcfService
2     {
3        public string TestMethod(string Name)
4        {
5            return "Hello 我是:" + Name;
6        }
7     }
WcfService

第四步:實現服務端

 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 = true
12                 };
13                 host.Description.Behaviors.Add(mdBehavior);
14                 host.Opened += delegate
15                 {
16                     Console.WriteLine("服務啟動");
17                 };
18                 try
19                 {
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就介紹完畢了。

 源碼


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM