WCF入門一[WCF概述]


一、什么是WCF

  WCF是使用托管代碼建立和運行面向服務(Service Oriented)應用程序的統一框架。它使得開發者能夠建立一個跨平台的、安全、可信賴、事務性的解決方案,且能與已有系統兼容協作。WCF是微軟分布 式應用程序開發的集大成者,它整合了.Net平台下所有的和分布式系統有關的技術,例如.Net Remoting、ASMX、WSE和MSMQ(消息隊列)。以通信(Communiation)范圍而論,它可以跨進程、跨機器、跨子網、企業網乃至於 Internet;以宿主程序而論,可以以ASP.NET,EXE,WPF,Windows Forms,NT Service,COM+作為宿主(Host)。WCF可以支持的協議包括TCP,HTTP,跨進程以及自定義,安全模式則包括SAML, Kerberos,X509,用戶/密碼,自定義等多種標准與模式。也就是說,在WCF框架下,開發基於SOA的分布式系統變得容易了,微軟將所有與此相 關的技術要素都包含在內,掌握了WCF,就相當於掌握了叩開SOA大門的鑰匙。

  最終目標是通過進程或不同的系統、通過本地網絡或是通過Internet收發客戶和服務之間的消息。

二、第一個WCF程序

  1.我們先新建一個項目,選擇WCF中的WCF服務應用程序新建:

  2.系統生成了兩個默認文件:IService1.cs和Service1.svc,其中IService1.cs是定義接口的,Service1.svc用來實現該接口。在這兩個文件中可以看到如下的代碼:

    // 注意: 使用“重構”菜單上的“重命名”命令,可以同時更改代碼和配置文件中的接口名“IService1”。
    [ServiceContract]
    public interface IService1
    {

        [OperationContract]
        string GetData(int value);

        [OperationContract]
        CompositeType GetDataUsingDataContract(CompositeType composite);

        // TODO: 在此添加您的服務操作
    }


    // 使用下面示例中說明的數據約定將復合類型添加到服務操作。
    [DataContract]
    public class CompositeType
    {
        bool boolValue = true;
        string stringValue = "Hello ";

        [DataMember]
        public bool BoolValue
        {
            get { return boolValue; }
            set { boolValue = value; }
        }

        [DataMember]
        public string StringValue
        {
            get { return stringValue; }
            set { stringValue = value; }
        }
    }
        public string GetData(int value)
        {
            return string.Format("You entered: {0}", value);
        }

        public CompositeType GetDataUsingDataContract(CompositeType composite)
        {
            if (composite == null)
            {
                throw new ArgumentNullException("composite");
            }
            if (composite.BoolValue)
            {
                composite.StringValue += "Suffix";
            }
            return composite;
        }

  可以看到接口文件IService1.cs里有幾個特性分別是:[ServiceContract]、[OperationContract]、[DataContract]、[DataMember],大致的用途如下:

  [ServiceContract]:指明該接口是一個WCF的服務契約,可以被外部的調用,不加則無法被外部調用。

  [OperationContract]:指明該方法是一個WCF的方法契約,可以被外部的調用,不加則無法被外部調用。

  [DataContract]:數據契約,指明該類是可供服務端和客戶端相互傳遞自定義數據的類型,聲明后該類型就可以被序列化在服務端和客戶端之間傳送。

  [DataMember]:數據成員,聲明后的屬性可以參與到客戶端和服務器端的類的屬性的序列化,沒有聲明的不參與序列化。

  在Service1.svc中已經實現了接口中的方法,將Service1.svc設置為啟動項,后調試會如下所示,這是vs自帶的服務測試的工具,不過無法測試異步的服務。

  

  雙擊左側樹狀圖中的方法GetData(),在上方輸入值后點擊調用可以下方看到方法返回值,則說明我們的接口成功了。

 

 三、WCF服務的使用

  1.接下來對我們的WCF程序進行發布到本地文件,發布的過程和WEB的項目發布類似,發布后我們部署到IIS上面。右鍵瀏覽Service1.svc出現如下的頁面后表明發布成功。http://192.168.3.30:7358/Service1.svc?wsdl就是我們需要引用的服務地址。

  注意如果無法發布成功,可能是部分的Windows功能沒有開啟,如下所示。

  

  2.新建一個新的控制台應用程序,右鍵引用->添加服務引用->將WCF服務引用地址輸入點擊確認即可引用成功。

  引用成功后在Service References文件夾下出現了一個ServiceReference1服務,在控制台程序中引用WCF服務的命名空間using ConsoleApplication2.ServiceReference1;使用如下代碼即可訪問服務接口。

  

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
//添加WCF的服務命名空間
using ConsoleApplication2.ServiceReference1;

namespace ConsoleApplication2
{
    class Program
    {
        static void Main(string[] args)
        {
            //Service1Client是在添加服務引用后服務器端的Service1在客戶端的代理類,一般的格式都是"*Client"這種格式的
            Service1Client sercive = new Service1Client();
            string str = sercive.GetData(666);
            Console.WriteLine("WCF服務返回值為:" + str);
            Console.ReadKey();
        }
    }
}

  返回結果如下:

四、說明

  這個隨筆是我自己學習流程的一個記錄,和大家共勉。

 


免責聲明!

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



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