<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                終于一路走來,到了本系列的最后一篇了,這一篇也沒什么好說的,整體知識框架已經在前面的系列文章中講完了,wcf的配置眾多,如果 不加一些指定配置,你可能會遇到一些災難性的后果,快來一睹為快吧。 ## 一: 第一個大坑 【數據傳輸量】    我們使用wcf的目的,就是用來進行分布式的數據交互,既然是交互,就一定要進行數據交換,可能一些新人并沒有注意到wcf在數據傳輸量上 面做了一個大小限制,比如我現在要傳輸一個2m的txt給service,會出現什么情況??? ![](https://box.kancloud.cn/2015-08-04_55c0b74a38995.png) ~~~ 1 static void Main(string[] args) 2 { 3 try 4 { 5 var txt = File.ReadAllText("E:\\1.txt"); 6 7 HomeServiceClient client = new HomeServiceClient(); 8 9 client.Get(txt); 10 11 int i = 10; 12 13 } 14 catch (Exception ex) 15 { 16 17 throw; 18 } 19 } ~~~ ![](https://box.kancloud.cn/2015-08-04_55c0b74abf2a1.png) 可是的可是,我們在玩aspnet的時候,再大的傳輸量都見過,但為什么這玩意就拋異常了呢???下面一個問題就來了,這個傳輸默認值到底 是多少??? 接下來我們就用ILSpy翻翻看。 ![](https://box.kancloud.cn/2015-08-04_55c0b74ae9043.png) 可以看到,這個叼毛玩意居然只有 64k。。。沒錯,你看到的就是64k,也就說明你的傳輸量不能大于64k,否則請求就會在client端拒絕, 知道了原因,我們現在就可以這么修改config了。 ~~~ <bindings> <netTcpBinding> <binding name="MySessionBinding" maxReceivedMessageSize="2147483647"/> </netTcpBinding> </bindings> ~~~ 有很多資料在配置這個坑的時候,也會使用MaxBufferSize 和?MaxBufferPoolSize,就是用來增加緩沖區和緩沖池的大小。 ![](https://box.kancloud.cn/2015-08-04_55c0b74b0aa2d.png) ## 一: 第二個大坑 【并發量太低】   說起這個大坑,還得先從一段代碼說起,下面是一段對服務進行2w次并發調用,然后我們看看效果。 ~~~ public class Program1 { static void Main(string[] args) { try { for (int i = 0; i < 200000; i++) { try { Task.Factory.StartNew((obj) => { try { HomeServiceClient client = new HomeServiceClient(); Console.WriteLine("第 {0} 個請求開始。。。", obj); client.Get("12312"); Console.WriteLine("第 {0} 個請求結束。。。", obj); } catch (Exception ex) { Console.WriteLine(ex.Message); } }, i); } catch (Exception ex) { Console.WriteLine(ex.Message); } } Console.Read(); } catch (Exception ex) { throw; } } } ~~~ ![](https://box.kancloud.cn/2015-08-04_55c0b74c3902d.png) ![](https://box.kancloud.cn/2015-08-04_55c0b74cd06c0.png) ? ? 從上面你可以看到,當并發數達到800左右的時候,servcie端就開始拒絕client端過來的請求了,并且之后的1min的時間里,client端 開始出現超時異常,這肯定不是我想看到的,?那有人就要說了,我的并發達到800多很正常啊,如果提高這個并發呢???其實在wcf里面 有一個叫做ServiceThrottlingElement綁定元素,它就是用來控制服務端的并發數。 ![](https://box.kancloud.cn/2015-08-04_55c0b74cef6dc.png) 這三個屬性的大概意思,我想大家都看的明白,不過有點奇怪的是,這三個屬性的默認值 和 ILSpy中看到的不一樣。。。 ![](https://box.kancloud.cn/2015-08-04_55c0b74e10c3f.png) 也懶的研究源碼了,不管怎么樣,反正這三個屬性值都是int類型的,所以我將他們設置為int.maxValue就好了。 ~~~ <system.serviceModel> <behaviors > <serviceBehaviors > <behavior name="nettcpBehavior"> <serviceMetadata httpGetEnabled="false" /> <!--是否在錯誤中包含有關異常的詳細信息--> <serviceDebug includeExceptionDetailInFaults="True" /> <serviceThrottling maxConcurrentCalls="2147483647" maxConcurrentInstances="2147483647" maxConcurrentSessions="2147483647" /> </behavior> </serviceBehaviors> </behaviors> <bindings> <netTcpBinding> <binding name="MySessionBinding" /> </netTcpBinding> </bindings> <services> <service behaviorConfiguration="nettcpBehavior" name="MyService.HomeService"> <endpoint address="net.tcp://127.0.0.1:19200/HomeService" binding="netTcpBinding" bindingConfiguration="MySessionBinding" contract="MyService.IHomeService" /> <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" /> <host> <baseAddresses> <add baseAddress="http://127.0.0.1:1920" /> </baseAddresses> </host> </service> </services> </system.serviceModel> ~~~ 然后我們再把程序跑起來看一看。。。 ![](https://box.kancloud.cn/2015-08-04_55c0b74eb7b39.png) ? ? ? 現在你可以發現并發早已突破800了,不過你要記住,如果并發數太多,容易造成系統資源耗盡,導致崩潰,這時候負載均衡就來 了,對吧,wcf需要修改的配置還有很多,正因為wcf框架龐大,很多默認配置不符合生產需求,所以大家在工作中需要注意,這個系列 就到此打住了,希望對你有幫助。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看