C# WCF的通信模式


wcf 通信模式一般分為三種;
1,請求/響應模式
2,單工模式
3,雙工模式
一,請求/響應模式
請求/響應通信是指客戶端向服務端發送消息后,服務端會向客戶端發送響應。這也意味着在接收到服務的響應以前,客戶端不會繼續執行操作。
缺點

  – 如果執行操作需要很長的時間,則會降低客戶端性能和響應能力。

優點

  – 響應消息中可返回SOAP 錯誤,這表明可能在通信或處理中發生了一些與服務有關的錯誤狀況。

例題:

如,上上節所示。直接添加WCF服務應用程序

二,單工模式

單向通信應是指通信只在一個方向進行,即從客戶端流向服務。服務不會發送響應,而客戶端也不會期望會有響應。這種情況下,客戶端發送消息,然后繼續執行。

若要為返回void 的操作指定單向消息交換,請將IsOneWay 屬性設置為true,默認為false.

[OperationContract(IsOneWay=true)] 方法不能帶有返回值、引用參數、輸出參數

例題:就是將請求/響應模式例題上的方法改為 void()類型的,且客戶端只是向服務端發送消息,服務器無消息返回給客戶端,即從客戶端看不出效果。

缺點

-看不出效果

優點

-響應速度快

 

三,雙工模式

雙工模式的特點是,無論使用單向消息發送還是請求/答復消息發送方式,服務和客戶端均能夠獨立地向對方發送消息。對於必須直接與客戶端通信或向消息交換的任意一方提供異步體驗(包括類似於事件的行為)的服務來說,這種雙向通信形式非常有用。

– 若要設計雙工協定,還必須設計回調協定,並將該回調協定的類型分配給標記服務協定的ServiceContractAttribute 屬性(attribute)的CallbackContract 屬性(property)。

 

– 若要實現雙工模式,您必須創建第二個接口,該接口包含在客戶端調用的方法聲明

差不多類似於兩個單工模式合並

例題:

服務端(配置文件和引用不再重復)

 配置文件:略,如上節,配置文件部署形似。

IService1.cs:

[ServiceContract(SessionMode = SessionMode.Required, CallbackContract = typeof(IServiceDuplexCallback))]//獲取雙工協定時回調的協定的類型
    public interface IService1
    {
        [OperationContract(IsOneWay = true)]
        void AddNumer(int x,int y);

    }

    public interface IServiceDuplexCallback  //CallbackContract回調客戶端方法
    {
        [OperationContract(IsOneWay = true)]
        void Calculate(int result);
    }

Service1.cs:

  [ServiceBehavior(InstanceContextMode=InstanceContextMode.PerSession)]//指服務協定實現內置的行為,獲取傳入消息中調用的實例數
    public class Service1 : IService1
    {
        IServiceDuplexCallback callback
        {
            get { return OperationContext.Current.GetCallbackChannel<IServiceDuplexCallback>(); }//獲取客戶端的通道及上下文權限
        }
        public void AddNumer(int x, int y)
        {
            int z = x + y;
            callback.Calculate(z);
        }

服務端:

添加服務引用,命名為myService

添加一個類CallbackHandler,用於向服務器流入方法

  public class CallbackHandler : myService.IService1Callback
    {
        public void Calculate(int result)
        {
          Console.WriteLine("結果為:" + result);
        }
    }

program.cs

            InstanceContext ic = new InstanceContext(new CallbackHandler());//實現上下文切換,獲取服務器的實例
            myService.Service1Client client = new wcfClient.myService.Service1Client(ic);
            client.AddNumer(3, 4);

 以上是個小例子,具體的完善在以后講解半雙工和全雙工。

 

 

 

 

 

 

 


免責聲明!

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



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