日本好好热aⅴ|国产99视频精品免费观看|日本成人aV在线|久热香蕉国产在线

  • <cite id="ikgdy"><table id="ikgdy"></table></cite>
    1. 西西軟件園多重安全檢測下載網(wǎng)站、值得信賴的軟件下載站!
      軟件
      軟件
      文章
      搜索

      首頁編程開發(fā)其它知識 → WCF編程中需要及時關(guān)閉的案例分享

      WCF編程中需要及時關(guān)閉的案例分享

      相關(guān)軟件相關(guān)文章發(fā)表評論 來源:西西整理時間:2011/4/24 7:57:26字體大。A-A+

      作者:西西點擊:138次評論:2次標簽: WCF

      手機QQ2017 for Androidv6.6.9 官方最新版
      • 類型:社交聊天大。37.8M語言:中文 評分:8.0
      • 標簽:
      立即下載

      剛學WCF的時候沒發(fā)現(xiàn)這個問題,調(diào)得很愉快卻沒有發(fā)現(xiàn)其實“暗藏殺機”,可謂危險重重,還好后來覺得是有些不妥,于是google“WCF需要關(guān)閉嗎”,立馬找到了幾個博客園的鏈接,進去一看,各位大俠均紛紛表示“關(guān)是一定要關(guān)的,但是你還不能用完就關(guān),因為關(guān)了,就不能再打開了,還得New,可以New的成本又有一點高”,好吧,這么說來就只有好好規(guī)劃一下了。

        那么什么時候該關(guān)呢,答案是異常了的時候,MSDN給出了代碼(錯誤處理部分,找不到鏈接了,見諒)

       

            catch (CommunicationException)
                  {
                      client.Abort();
                  }
                  catch (TimeoutException)
                  {
                      clent.Abort();
                  }

       所以這樣一來,就有了解決方案,那就是在每一處需要調(diào)用Wcf和代碼里加上try catch,大概就成了如下這樣

      UserClient client = new UserClient();
      try
      {
      client.Create(new User(){
           UserName="xian",
           Password="123"});
      }

      catch (CommunicationException)
      {
         client.Abort();
      }
      catch (TimeoutException)
      {
         clent.Abort();
      }

         這樣挺好的,沒錯,不過我們總不可能只調(diào)用一個Wcf接口吧,我們要調(diào)的可是一系列,也就是若干接口,那么就我們就需要寫很多重復的錯誤處理代碼塊了。這樣原來沒什么問題,而且是理所當然的事情?墒俏矣浀媚澄焕哮B說過當代碼出現(xiàn)很大程度重復的時候你就該重構(gòu)它了(也是在博客園看到了,很普通但深入人心的道理),并且為了讓代碼好看一點,我們還是想想好點的辦法。

      如果你有些經(jīng)驗,肯定馬上就去想到使用委托來實現(xiàn)消除代碼的冗余,是的,下面就是我這次的實現(xiàn)方式,代碼如下: 

      ServiceInvokeHelper調(diào)用輔助類

      using System;
      using System.Collections.Generic;
      using System.Linq;
      using System.Text;
      using System.ServiceModel;

      namespace Helper
      {
          /// <summary>
          /// Wcf服務調(diào)用輔助類
          /// </summary
          public static class ServiceInvokeHelper<TChannel> where TChannel : ICommunicationObject, new()
          {
              #region private fields
              private static Dictionary<string, TChannel> _ChannelDic = new Dictionary<string, TChannel>();
              private static object _Lockhelper = new object();

              private static TResult TryFunc<TResult>(Func<TChannel, TResult> func, TChannel channel)
              {
                  string tChannelName = typeof(TChannel).FullName;
                  try
                  {
                      return func(channel);
                  }
                  catch (CommunicationException)
                  {
                      channel.Abort();
                      lock (_Lockhelper)
                          _ChannelDic.Remove(tChannelName);
                      throw;
                  }
                  catch (TimeoutException)
                  {
                      channel.Abort();
                      lock (_Lockhelper)
                          _ChannelDic.Remove(tChannelName);
                      throw;
                  }
                  catch (Exception)
                  {
                      channel.Abort();
                      lock (_Lockhelper)
                          _ChannelDic.Remove(tChannelName);
                      throw;
                  }
            }

              private static TChannel GetChannel()
              {
                  TChannel instance;
                  string tChannelName = typeof(TChannel).FullName;
                  if (!_ChannelDic.ContainsKey(tChannelName))
                  {
                      lock (_Lockhelper)
                      {
                          instance = Activator.CreateInstance<TChannel>();
                          _ChannelDic.Add(tChannelName, instance);
                      }
                  }
                  else
                  {
                      instance = _ChannelDic[tChannelName];
                  }
                  if (instance.State != CommunicationState.Opened && instance.State != CommunicationState.Opening)
                      instance.Open();
                  return instance;
              }

              /// <summary>
              /// 直接調(diào)用,無返回值
              /// </summary>
              public static void Invoke(Action<TChannel> action)
              {
                  TChannel instance = GetChannel();
                  TryFunc(
                      client =>
                      {
                          action(client);
                          return (object)null;
                      }
                      , instance);
              }
              /// <summary>
              /// 有返回值的調(diào)用
              /// </summary>
              public static TResult Invoke<TResult>(Func<TChannel, TResult> func)
              {
                  TChannel instance = GetChannel();
                  ICommunicationObject channel = instance as ICommunicationObject;
                  TResult returnValue = default(TResult);
                  returnValue = TryFunc(func, instance);
                  return returnValue;
              }
            }
      }

        有了以上代碼,我們就可以這樣調(diào)Wcf了

      ServiceInvokeHelper<UserClient>.Invoke(client=>client.Create({new User{
          UserName="xian";
          Password="123";
      }}));

        測試過程中發(fā)現(xiàn)這樣不支持out 和ref參數(shù)的調(diào)用,比如這樣是不可以的

      public void GetUserList(int pageindex,int pagesize,ref count)
      {
           return ServiceInvokeHelper<UserClient>.Invoke(client=>client.GetUserList(pageindex,pagesize,ref count));
      }

        但是我們可以變通成如下模樣

      public void GetUserList(int pageindex,int pagesize,ref count)
      {
          return ServiceInvokeHelper<UserClient>.Invoke(client=>

         {

          int tmpCount = -1;

          client.GetUserList(pageindex,pagesize,ref tmpCount));

          count = tmpCount;

        }
      }

        是不是方便許多,并且也不但心因為關(guān)閉不及時造成連接數(shù)到達上限的情況,看起來不起眼的一個東西就分享到這時,感謝你的閱讀!

        寂寞交友
        (73)寂寞交友
        寂寞交友由西西為大家整理一系列火熱的社交應用,因為寂寞而交友,隨著時代的發(fā)展,人們越來越無法滿足現(xiàn)有的交際圈子,對于擇偶標準的提高,催生出一系列單身男女的情感問題,壓抑的情緒需要得到一定的釋放,如果你想找尋屬于自己的緣分,就趕快下載吧。交友軟件排行微信企鵝之子的基數(shù)之巨大,寂寞的時候搖一搖,絲男也會有春天不過企鵝之子也有個弊病,依托于的用戶資源,環(huán)肥燕瘦難以保證。來往來往是拼爹的,背靠大樹好乘涼。...更多>>
        • 手機QQ2017 for Androidv6.6.9 官方

          02-14 / 37.8M

          推薦理由:全新的手機QQ2017版正式發(fā)布。qq2017新版本在保留原有功能基礎上,加入2套趣味表情,并對UI進行簡化設計,去
        • 陌陌安卓版7.5.1 官方正式版

          01-13 / 55.7M

          推薦理由:陌陌安卓版是類似于微信的一款基于真實地理位置的交友工具你可以通過陌陌認識周圍的陌生人或者朋友,免費發(fā)
        • 陌陌電腦版v0.2.1 官方最新版

          07-22 / 47.9M

          推薦理由:大家都知道陌陌吧,現(xiàn)在西西軟件園給大家提供一款電腦版本的陌陌哦。即使你沒有智能手機,也能玩陌陌~您可以
        • 來往電腦版v6.1.0 官方版

          10-12 / 21.8M

          推薦理由:來往推出來也有一段時間了,西西一直在默默關(guān)注這款社交軟件的發(fā)展,從推廣的力度來看,來往這款軟件毋庸置
        • 來往安卓版6.6.5 官方最新版

          07-19 / 24.6M

          推薦理由:使用來往應用端輕松對好友分組,輕松與自己的小圈子分享有趣的時刻。在來往,不用擔心你的媽媽會看到你與朋
        • 點點蟲(閱后即焚)6.8.2官網(wǎng)安卓版

          01-23 / 23.3M

          推薦理由:點點蟲app是一款閱后即焚聊天應用,最大限度的保障了用戶的個人隱私,你可以在此發(fā)瀉心中的不滿及各類情緒,
        生活分享
        (13)生活分享
        生活分享系列是由西西為大家整理,當前的各類軟件都是服務于我們的生活,只是著重點不同,有聊天有美食有娛樂有旅行,西西特地為大家準備了一些日常生活中常用的小工具,相信能在平時的日常生活中用到,讓我們能更好的品味生活。生活小妙招巧用牙膏若有小面積皮膚損傷或燒傷燙傷,抹上少許牙膏,可立即止血止痛,也可防止感染,療效頗佳。巧除紗窗油膩可將洗衣粉吸煙剩下的煙頭一起放在水里,待溶解后,拿來擦玻璃窗紗窗,效果均不...更多>>
        • 手機QQ2017 for Androidv6.6.9 官方

          02-14 / 37.8M

          推薦理由:全新的手機QQ2017版正式發(fā)布。qq2017新版本在保留原有功能基礎上,加入2套趣味表情,并對UI進行簡化設計,去
        • 網(wǎng)易云音樂電腦版V2.1.2.168028 官

          01-01 / 30.7M

          推薦理由:網(wǎng)易云音樂手機版上線半年之際,PC版也要和大家見面啦!網(wǎng)易云音樂是一款專注于發(fā)現(xiàn)與分享的音樂產(chǎn)品,網(wǎng)易云
        • 網(wǎng)易云音樂3.8.1 安卓版

          01-29 / 22.4M

          推薦理由:華少【中國好聲音主持人】——只有在網(wǎng)易云音樂,我的身份才是音樂DJ,與你聊聊我心中的好聲音。王東【著名
        • 知乎日報電腦版v2.5.2 官方pc版

          06-15 / 5.0M

          推薦理由:知乎日報是知乎每日精選出一些全網(wǎng)最值得看的內(nèi)容整合產(chǎn)物,知乎日報以獨有的方式為你提供最高質(zhì)、最深度、
        • 知乎日報v2.6.2 安卓版

          01-22 / 11.4M

          推薦理由:知乎最近貌似越來越活躍了,先是出了個知乎客戶端現(xiàn)在又來個知乎日報,大概是想吸引更多的用戶吧。用最熱的
        • 網(wǎng)易公開課安卓版4.5.0 官方最新版

          02-07 / 17.3M

          推薦理由:網(wǎng)易公開課安卓版,全球知名院校的高級教授公開課,免費觀看,最大最全的課程平臺,國內(nèi)外頂尖學府的海量名
        2015最受歡迎APP
        (27)2015最受歡迎APP
        中國最受歡迎榜單發(fā)布,西西第一時間為用戶推出最受歡迎排行榜專區(qū)下載,在這里你可以下載到中國最受歡迎的,在整個市場,實際上仍舊是占領主導地位。中國最受歡迎榜單前分別是微信手機淘寶搜狗輸入法瀏覽器支付寶錢包瀏覽器愛奇藝今日頭條百度地圖酷狗音樂大眾點評滴滴出行等等。整個市場可以分成三大類第一類是移動社交移動出行手機地圖移動購物等領域已經(jīng)是大局已定。微信移動社交,以及快的滴滴手機地圖手機淘寶移動商城等領域...更多>>
        00后最常用的app
        (29)00后最常用的app
        西西軟件園為用戶帶來后手機必備軟件大全,最常用的手機下載,一次性搞定這些熱門的社交軟件和游戲,讓你的生活更加精彩,下面看下部分軟件介紹社交軟件手機,手機移動版提供多媒體溝通服務,方便用戶在移動設備上通過語音圖片視頻等方式輕松交流。致力于更完美的移動社交娛樂與生活體驗樂在溝通年,聊天歡樂億人微信,微信,數(shù)億人使用,能通過手機網(wǎng)絡給好友發(fā)送語音文字消息表情圖片和視頻,還可分享照片到朋友圈。通過搖一搖查...更多>>
        qq2016
        (11)qq2016
        每年年初騰訊都會發(fā)布當年最新版的,正是騰訊官方發(fā)布的正式版。雖然從版開始就不再以年號明明而是以版本,不過用戶還是習慣的年號版本。最新版的因為剛剛發(fā)布肯定是有一些細節(jié)上的問題的,不過大家可以體驗到新版的功能特性也是很不錯的,如果你喜歡折騰可以來西西下載版,這里西西給大家提供了最新的電腦版下載及手機版下載。...更多>>

        相關(guān)評論

        閱讀本文后您有什么感想? 已有人給出評價!

        • 8 喜歡喜歡
        • 3 頂
        • 1 難過難過
        • 5 囧
        • 3 圍觀圍觀
        • 2 無聊無聊

        熱門評論

        最新評論

        發(fā)表評論 查看所有評論(2)

        昵稱:
        表情: 高興 可 汗 我不要 害羞 好 下下下 送花 屎 親親
        字數(shù): 0/500 (您的評論需要經(jīng)過審核才能顯示)