现在的位置: 首页 > 综合 > 正文

VS,WCF(DotNet)常见错误处理系列(整理)

2012年02月20日 ⁄ 综合 ⁄ 共 1286字 ⁄ 字号 评论关闭

1)由于以前的函数求值超时,函数求值被禁用。必须继续执行才能重新启用函数求值:

这是因为调试时会自动对Local/Watch等窗口里面(或鼠标停留所在)的变量求值,为了防止用户写的程序错误(比如死循环),系统有一个超时限制,如果某个属性的get中做了很复杂的操作(而不是简单地返回一个私有变量的话),就有可能超过这个时间限制(如果strPage很大的话,你的正则运算就很可能会超时)。

可以禁用自动求值的功能:
工具 -> 选项 -> 调试 -> 常规 -> 启用属性求值和其他隐式函数调用
去掉前面打勾,不过这样就不会对属性变量自动求值了。

http://msdn.microsoft.com/en-us/library/ms234762%28VS.80%29.aspx

http://blogs.msdn.com/greggm/archive/2004/02/04/67766.aspx

VS里可以设置。
2)IIS的线程数限制问题
任何一个版本的win2003的iis6对线程都是有限制的。
可以在machin.config中修改maxWorkerThreads和maxIoThreads的值。
不过最好不要设置得太大了,否则cpu对线程的管理将浪费大量资源。

在IIS管理里,找到网站节点,右击打开属性页,去性能页,确认没有设置限制或设置的连接数很大

如果连接数超过设置的限制,会出现service   unavailable的提示,但如果没有设限,连接数很大,请求队列满的时候,就会出现server   too   busy的提示

http://www.microsoft.com/technet/prodtechnol/WindowsServer2003/Library/IIS/a8c5b994-7722-4dc6-a246-7dfe667c6816.mspx?mfr=true

3)System.TimeoutException: 请求通道在等待 00:01:00 以后答复时超时。增加传递给请求调用的超时值,或者增加绑定上的 SendTimeout 值

1)首先保证客户端每次建立的连接在使用完成后进行关闭.即调用Close()方法,
  否则此连接会在设置的会话(一般为10分钟)后才自动关闭.期间任何客户端也无法使用此服务.
2)如果默认的连接数不能满足客户端的需要,可以增加连接数.配置文件如下:
<serviceThrottling maxConcurrentCalls="20" maxConcurrentSessions="20"
maxConcurrentInstances="30" />

  说明:maxConcurrentCalls :最大并发数,默认为16

  maxConcurrentSessions :最大的会话数,主要针对于PerSession的情况,默认为10

  maxConcurrentInstances:最大实例数,默认为26

4) 主子线程问题.
   Thread.Join().
      注意在Winform中,如果要等待子线程完成后才继续执行,则不能在线程中调用主线程的方法,
因为这样会造成线程调用死锁。

抱歉!评论已关闭.