wcf客户端多线程调用服务端一个方法-amethod,amethod可能会执行40秒左右,我发现我ui线程发起一个线程threada再该发起的线程中又发起多个线程调用amethod是正常的,但是我在thearda及其子线程还没有结束的时候,又发起threadb,然后我在ui线程调用amethod的时候发生了阻塞,必须等线程都ok才会返回,谁有遇到过
你设定过ThreadPool#SetMaxThreads么
1L的可能性不大,不至于线程池这么小。
服务端函数如果执行体是串行(比如加锁执行)的,那第二个执行让你等待第一个执行完也是可能的。
自己好好分析,参数太少,仅供参考。
用fidder,监控一下你客户端请求,如果你第二次请求的时候,fidder处于请求的等待状态,说明,阻塞在服务端,你主要查一下服务端 是否有同步的代码。如果fiddler一直没有监控到第二次请求,直到第一次请求完成了,第二次请求才出现,那么说明,主要阻塞在你服务端。你检查一下,你的wcf的client实例是不是每个线程单独实例化的,.net的io线程是有控制的,但是,至少两个及以上,所以,你的不应该是被.net限制了tcp请求数量。
如果只是一次调用40秒的话,那还情有可原,如果你下次调用还需要40秒的话,那建议你还是换个写后台代码的。
经常在想接那么多分(圆豆)干嘛
你UI线程直接调用amethod肯定是会阻塞的啊
问题找到了,都不是这些问题,是因为我的wcf用basichttp访问,http在wcf最大并发是2,所以要设置 System.Net.ServicePointManager.DefaultConnectionLimit = 1000; 就解决了
问题找到了,都不是这些问题,是因为我的wcf用basichttp访问,http在wcf最大并发是2,所以要设置 System.Net.ServicePointManager.DefaultConnectionLimit = 1000;
– devsuperdata 6年前就解决了