<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      HTTP與Tcp協議下雙工通信的差異

      WCF中經常會使用HTTP協議與Tcp協議來實現雙工通訊,對應使用的協議分別為WsDualHttpBinding、NetTcpBinding。
      HTTP是基于應用層的協議,而Tcp是基于傳輸層的協議。Tcp經過三次握手建立起客戶端到服務端的可靠連接,發起請求的客戶端與回調客戶端的服務端都使用一個連接就能完成。使用HTTP協議時,從客戶端到服務端發起請求到服務端返回給客戶端回復完成后,連接就關閉。
      由于HTTP的這種無連接性,基于WsDualHttpBinding的雙工在進行通訊時實際上服務端在回調客戶端時,會與NetTcpBinding在使用上有些差異。
      1、NetTcpBinding實現雙工
      1.1契約部分:
      1.1.1 契約接口定義:
          [ServiceContract(CallbackContract = typeof(ICallback))]
          public interface ICalculator
          {
              [OperationContract]
              void Add(double x, double y);
          }
      1.1.2 回調接口定義:
          public interface ICallback
          {
              [OperationContract]
              void Display(double x, double y , double result);
          }
      1.2服務實現:
              public void Add(double x, double y) 

              {
                  Console.WriteLine("開始Add計算");
                  ICallback callback = OperationContext.Current.GetCallbackChannel<ICallback>();
                  callback.Display(x, y, x + y);
                  Console.WriteLine(string.Format("{0},{1}", x, y));
              }

      服務通過OperationContext.Current.GetCallbackChannel<T>泛型方法獲取對客戶端回調代理類,對客戶端進行回調
        
          public T GetCallbackChannel<T>() 

          {
              if ((this.channel != null) && !this.IsUserContext)
              {
                  return (T) this.channel.Proxy;
              }
              return default(T);
          }

       

      1.3 服務端配置:

      <system.serviceModel>

       <services>
                  <service name="Services.CalculatorServices">
                      <endpoint address="Calaulator" binding="netTcpBinding" contract="Contract.ICalculator"></endpoint>
                      <host>
                          <baseAddresses>
                              <add baseAddress="net.tcp://127.0.0.1:6688"/>
                          </baseAddresses>
                      </host>
                  </service>        
              </services>
      </system.serviceModel>

      1.4 客戶端部分:
      回調接口的實現:
           public void Display(double x, double y, double result) 

          {
                  Console.WriteLine(string.Format("{0}+{1}={2}", x, y, result));
          }

      客戶端配置:
      <system.serviceModel>        

      <client>
                  <endpoint address="net.tcp://127.0.0.1:6688/Calaulator" binding="netTcpBinding" contract="Contract.ICalculator" name="calculatorTcp"></endpoint>
              </client>
      </system.serviceModel>

      接口調用:
                  InstanceContext context = new InstanceContext(new CallBack());
                  using (var channelFactory = new DuplexChannelFactory<ICalculator>(context, "calculatorTcp"))
                  {
                      ICalculator proxy = channelFactory.CreateChannel();
                      proxy.Add(1.02.0);
                      Console.ReadLine();
                  }
      結果如下圖:
      服務端:

       

      客戶端:

       

       

      2、WsDualHttpBinding實現雙工。

      操作系統:XP SP3。IIS版本:5.1
      同樣以上面的契約為例.在數據包、或者請求-響應模式中,如果更換協議一般只需更改所使用的綁定即可。我們將客戶端配置改為如下:
      <system.serviceModel>       
        <client>
                  <endpoint address="http://127.0.0.1:8866/Calaulator/ws" binding="wsDualHttpBinding" contract="Contract.ICalculator" name="calculatorWsDual" ></endpoint>
              </client>
      </system.serviceModel>
       

      然后使用calculatorWsDual重新生成ChannelFactory:

       

      using (var channelFactory = new DuplexChannelFactory<ICalculator>(context, "calculatorWsDual"))
      運行調試:有如下異常:
      解決辦法為Endpoint配置綁定行為,如下:

       

      <system.serviceModel>       
           <bindings>
                  <wsDualHttpBinding>
                      <binding name ="myWsDualBinding" clientBaseAddress="http://127.0.0.1:3636/Service/CallbackService"></binding>
                  </wsDualHttpBinding>
              </bindings>
              <client>
                  <endpoint address="http://127.0.0.1:8888/Service/Calculator"  binding="wsDualHttpBinding" contract="Contracts.ICalculator"  name="calculatorService" bindingConfiguration="myWsDualBinding"/>
              </client>

      </system.serviceModel>  


       這樣,問題就得以解決


      posted @ 2012-04-12 13:51  tyb1222  閱讀(3020)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 精品黄色av一区二区三区| 五月综合激情婷婷六月| 人人妻人人狠人人爽天天综合网| 国产999久久高清免费观看| 国产AV大陆精品一区二区三区| 中文字幕一区二区网站| 精品无码久久久久国产电影| 亚洲精品人成网线在播放VA| 成人一区二区不卡国产| 一区二区三区国产亚洲网站| 国产首页一区二区不卡| 综合偷自拍亚洲乱中文字幕| 亚洲av无一区二区三区| 泊头市| 一级国产在线观看高清| 精品2020婷婷激情五月| 国产午夜精品福利免费看| 国产清纯在线一区二区| 亚洲婷婷综合色高清在线| 精品一区二区不卡免费| 人妻精品动漫H无码中字| 亚洲中文字幕人妻系列| 中文有无人妻vs无码人妻激烈| 国产中文字幕精品在线| 最近中文字幕日韩有码| 国产成人亚洲无码淙合青草| 久久精品国产91精品亚洲| 蜜桃在线一区二区三区| 沙河市| 免费观看全黄做爰大片| 国产精品自在拍首页视频8| 狠狠躁夜夜躁人人爽天天5| 亚洲一区二区三区在线观看精品中文 | 精品亚洲精品日韩精品| 国产大学生自拍三级视频| 国产精品一码二码三码| 亚洲第一无码专区天堂| 亚洲av日韩av综合在线观看| 樱花影院电视剧免费| 真实国产老熟女无套中出| 国产一级老熟女自拍视频|