實現WCF的步驟如下: 設計服務協議 實現服務協議 配置服務 托管服務 生成客戶端(這步可有可無) 設計或定義服務協議要麼使用介面,要麼使用類。建議介面,使用介面好處一堆例如修改介面的實現,但是服務協定有無需改變。 設計服務協議,介面上使用 ServiceContractAttribute ,方法上 ...
實現WCF的步驟如下:
- 設計服務協議
- 實現服務協議
- 配置服務
- 托管服務
- 生成客戶端(這步可有可無)
設計或定義服務協議要麼使用介面,要麼使用類。建議介面,使用介面好處一堆例如修改介面的實現,但是服務協定有無需改變。
設計服務協議,介面上使用 ServiceContractAttribute ,方法上使用OperationContractAttribute。
服務協議的每個方法的參數和返回值的類型都必須是可序列化的,預設.net自帶的類型都是可序列化的。
如果有在介面裡面使用到自定義的類型,就要使用到數據協議了,那自定義的類型 使用DataContractAttribute,裡面屬性成員使用DataMemberAttribute。
namespace DataContractinWCF.Web { [ServiceContract] public interface IService1 { [OperationContract] List<Customer> GetCustomerData(int CustomerID); } [DataContract] public class Customer { private string m_Name; private int m_Age; private int m_Salary; private string m_Designation; private string m_Manager; [DataMember] public string Name { get { return m_Name; } set { m_Name = value; } } [DataMember] public int Age { get { return m_Age; } set { m_Age = value; } } [DataMember] public int Salary { get { return m_Salary; } set { m_Salary = value; } } [DataMember] public string Designation { get { return m_Designation; } set { m_Designation = value; } } [DataMember] public string Manager { get { return m_Manager; } set { m_Manager = value; } } } }View Code
wcf的消息交換有三種模式:請求/答覆、單向、雙工。
預設是“請求/答覆”模式,即使方法返回值是void,也可以是請求/答覆。這種模式優點是,服務發生錯誤會返回soap錯誤
[OperationContractAttribute] string Hello(string greeting); [OperationContractAttribute] void Hello(string greeting);View Code
單向:設置IsOneWay=true,服務操作方法返回值必須是void。客戶端發送消息後,就不再等待服務操作。即使服務報錯也不返回,只能知道發送消息報錯。
[OperationContractAttribute(IsOneWay=true)] void Hello(string greeting);View Code
雙工通信:比前兩種複雜。。。跳過先。
如果方法參數有ref參數或out參數,不能使用單向通信,因為必須有返迴響應值。