终于一路走来,到了本系列的最后一篇了,这一篇也没什么好说的,整体知识框架已经在前面的系列文章中讲完了,wcf的配置众多,如果

不加一些指定配置,你可能会遇到一些灾难性的后果,快来一睹为快吧。

一: 第一个大坑 【数据传输量】

   我们使用wcf的目的,就是用来进行分布式的数据交互,既然是交互,就一定要进行数据交换,可能一些新人并没有注意到wcf在数据传输量上

面做了一个大小限制,比如我现在要传输一个2m的txt给service,会出现什么情况???

        static void Main(string[] args)
{
try
{
var txt = File.ReadAllText("E:\\1.txt"); HomeServiceClient client = new HomeServiceClient(); client.Get(txt); int i = ; }
catch (Exception ex)
{ throw;
}
}

可是的可是,我们在玩aspnet的时候,再大的传输量都见过,但为什么这玩意就抛异常了呢???下面一个问题就来了,这个传输默认值到底

是多少??? 接下来我们就用ILSpy翻翻看。

可以看到,这个叼毛玩意居然只有 64k。。。没错,你看到的就是64k,也就说明你的传输量不能大于64k,否则请求就会在client端拒绝,

知道了原因,我们现在就可以这么修改config了。

    <bindings>
<netTcpBinding>
<binding name="MySessionBinding" maxReceivedMessageSize="2147483647"/>
</netTcpBinding>
</bindings>

有很多资料在配置这个坑的时候,也会使用MaxBufferSize 和 MaxBufferPoolSize,就是用来增加缓冲区和缓冲池的大小。

一: 第二个大坑 【并发量太低】

  说起这个大坑,还得先从一段代码说起,下面是一段对服务进行2w次并发调用,然后我们看看效果。

    public class Program1
{
static void Main(string[] args)
{
try
{
for (int i = ; i < ; i++)
{
try
{
Task.Factory.StartNew((obj) =>
{
try
{
HomeServiceClient client = new HomeServiceClient(); Console.WriteLine("第 {0} 个请求开始。。。", obj); client.Get(""); 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;
}
}
}

从上面你可以看到,当并发数达到800左右的时候,servcie端就开始拒绝client端过来的请求了,并且之后的1min的时间里,client端

开始出现超时异常,这肯定不是我想看到的, 那有人就要说了,我的并发达到800多很正常啊,如果提高这个并发呢???其实在wcf里面

有一个叫做ServiceThrottlingElement绑定元素,它就是用来控制服务端的并发数。

这三个属性的大概意思,我想大家都看的明白,不过有点奇怪的是,这三个属性的默认值 和 ILSpy中看到的不一样。。。

也懒的研究源码了,不管怎么样,反正这三个属性值都是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>

然后我们再把程序跑起来看一看。。。

现在你可以发现并发早已突破800了,不过你要记住,如果并发数太多,容易造成系统资源耗尽,导致崩溃,这时候负载均衡就来

了,对吧,wcf需要修改的配置还有很多,正因为wcf框架庞大,很多默认配置不符合生产需求,所以大家在工作中需要注意,这个系列

就到此打住了,希望对你有帮助。

十五天精通WCF——终结篇 那些你需要注意的坑的更多相关文章

  1. [转]十五天精通WCF——终结篇 那些你需要注意的坑

    终于一路走来,到了本系列的最后一篇了,这一篇也没什么好说的,整体知识框架已经在前面的系列文章中讲完了,wcf的配置众多,如果 不加一些指定配置,你可能会遇到一些灾难性的后果,快来一睹为快吧. 一: 第 ...

  2. 十五天精通WCF——第一天 三种Binding让你KO80%的业务

    转眼wcf技术已经出现很多年了,也在.net界混的风生水起,同时.net也是一个高度封装的框架,作为在wcf食物链最顶端的我们所能做的任务已经简单的不能再简单了, 再简单的话马路上的大妈也能写wcf了 ...

  3. 十五天精通WCF——第十四天 一起聊聊FaultException

     我们在玩web编程的时候,可能你会不经意的见到一些http500的错误,我想你应该不会陌生的,原因你应该也知道,服务器异常嘛, 这时候clr会把这个未处理的异常抛给iis并且包装成http500的错 ...

  4. [转]十五天精通WCF——第十四天 一起聊聊FaultException

     我们在玩web编程的时候,可能你会不经意的见到一些http500的错误,我想你应该不会陌生的,原因你应该也知道,服务器异常嘛, 这时候clr会把这个未处理的异常抛给iis并且包装成http500的错 ...

  5. [转]十五天精通WCF——第一天 三种Binding让你KO80%的业务

    转眼wcf技术已经出现很多年了,也在.net界混的风生水起,同时.net也是一个高度封装的框架,作为在wcf食物链最顶端的我们所能做的任务已经简单的不能再简单了, 再简单的话马路上的大妈也能写wcf了 ...

  6. 十五天精通WCF——第十二天 说说wcf中的那几种序列化

    我们都知道wcf是由信道栈组成的,在我们传输的参数走到传输信道层之前,先需要经过序列化的过程,也就是将参数序列化为message,这篇 我们就来说说这里的序列化,蛮有意思的,可能初学者也明白,在wcf ...

  7. 十五天精通WCF——第十一天 如何对wcf进行全程监控

    说点题外话,我们在玩asp.net的时候,都知道有一个叼毛玩意叫做“生命周期”,我们可以用httpmodule在先于页面的page_load中 做一些拦截,这样做的好处有很多,比如记录日志,参数过滤, ...

  8. 十五天精通WCF——第十天 学会用SvcConfigEditor来简化配置

    我们在玩wcf项目的时候,都是自己手工编写system.serviceModel下面的配置,虽然在webconfig中做wcf的服务配置的时候,vs提供大多 数的代码提示,但对于不太熟悉服务配置的小鸟 ...

  9. 十五天精通WCF——第八天 对“绑定”的最后一点理解

    转眼已经中断10几天没有写博客了,也不是工作太忙,正好碰到了端午节,然后最近看天津台的爱情保卫战入迷了...太好看了,一直都是回味无穷...而且 涂磊老师话说的真是tmd的经典,然后就这样耽搁了,好了 ...

随机推荐

  1. mysql-databaseython 3.4.0 with MySQL database

    Phttp://shttp://stackoverflow.com/questions/23376103/python-3-4-0-with-mysql-databasetackoverflow.co ...

  2. XE7 Update 1 选 iOS 8.1 SDK 发布 iPhone 3GS 实机测试

    测试实机:iPhone 3GS(v6.1.2)其它机种也可以正常发布,方法以此类推 开发环境:Delphi XE7 Update 1(选择 iOS 8.1 SDK) 发布时需要到 Project &g ...

  3. Firemonkey Bitmap 设定像素颜色 Pixel

    VCL 和 Firemonkey 的 Bitmap 处理像素的方式不相同,下例为将图片内不是「白色」的像素全部改成「黑色」: procedure TForm1.Button1Click(Sender: ...

  4. poj-2236-Wireless Network

    Wireless Network Time Limit: 10000MS   Memory Limit: 65536K Total Submissions: 24155   Accepted: 100 ...

  5. 配置云服务器 FTP 服务

    自己配置的环境: OS: 阿里云 CentOS 6.5 >>Begin: 1. 登录到阿里云服务器(如何登录阿里云服务器), 在root权限下, 通过如下命令安装 vsftp [root@ ...

  6. ServletContext与网站计数器

    什么是ServletContext? ServletContext是服务器的一个公用的空间,是不同的浏览器共享的一个数据. 由图可以看出ServletContext和Cookie与session之间的 ...

  7. 微信中a链接无法进行跳转

    [问题]微信页面开发时,各个主页之间的跳转,完全是通过a链接进行的,但是来回跳转几次,再次从其他主页面跳回首页的时候,微信头部出现了跳转加载进度条,但是就是不跳转,也没有任何反应 [范围]只出现在微信 ...

  8. go语言 类型:布尔类型

    Go语言中的布尔类型与其他语言基本一致,关键字也为bool,可赋值为预定义的true和false示例代码如下: var v1 bool v1 = true v2 := (1 == 2) // v2也会 ...

  9. N900快捷键

    Ctrl + C 复制文本 Ctrl + V 粘贴文本 Ctrl + X 剪切文本 Ctrl + A 全部选择 Ctrl + O 打开 Ctrl + N 新建 Ctrl + S 保存 Ctrl + Z ...

  10. CP强制覆盖

    发现在Fedora 10 /ubutun 里面用cp -fr src dest,即使加了-f也是不能强行覆盖的,这时怎么回事的呢?一两个文件还好说,就输几个yes吧,但是要是n多文件怎么办,那还不输死 ...