首页 新闻 搜索 专区 学院

一个关于wcf客户端多线程调用服务端一个方法的问题

0
悬赏园豆:200 [待解决问题]

wcf客户端多线程调用服务端一个方法-amethod,amethod可能会执行40秒左右,我发现我ui线程发起一个线程threada再该发起的线程中又发起多个线程调用amethod是正常的,但是我在thearda及其子线程还没有结束的时候,又发起threadb,然后我在ui线程调用amethod的时候发生了阻塞,必须等线程都ok才会返回,谁有遇到过

devsuperdata的主页 devsuperdata | 初学一级 | 园豆:4
提问于:2018-01-31 09:09

问题找到了,都不是这些问题,是因为我的wcf用basichttp访问,http在wcf最大并发是2,所以要设置 System.Net.ServicePointManager.DefaultConnectionLimit = 1000;
就解决了

devsuperdata 2年前
< >
分享
所有回答(7)
0

你设定过ThreadPool#SetMaxThreads么

Daniel Cai | 园豆:10374 (专家六级) | 2018-01-31 09:12
0

1L的可能性不大,不至于线程池这么小。

服务端函数如果执行体是串行(比如加锁执行)的,那第二个执行让你等待第一个执行完也是可能的。

自己好好分析,参数太少,仅供参考。

花飘水流兮 | 园豆:11768 (专家六级) | 2018-01-31 09:20
0

用fidder,监控一下你客户端请求,如果你第二次请求的时候,fidder处于请求的等待状态,说明,阻塞在服务端,你主要查一下服务端 是否有同步的代码。如果fiddler一直没有监控到第二次请求,直到第一次请求完成了,第二次请求才出现,那么说明,主要阻塞在你服务端。你检查一下,你的wcf的client实例是不是每个线程单独实例化的,.net的io线程是有控制的,但是,至少两个及以上,所以,你的不应该是被.net限制了tcp请求数量。

ensleep | 园豆:1403 (小虾三级) | 2018-01-31 09:25
0

如果只是一次调用40秒的话,那还情有可原,如果你下次调用还需要40秒的话,那建议你还是换个写后台代码的。

爱编程的大叔 | 园豆:30698 (高人七级) | 2018-01-31 10:10
0

经常在想接那么多分(圆豆)干嘛

数据酷软件 | 园豆:130 (初学一级) | 2018-01-31 15:59
0

你UI线程直接调用amethod肯定是会阻塞的啊

梦里的畅泳 | 园豆:159 (初学一级) | 2018-01-31 19:17
0

问题找到了,都不是这些问题,是因为我的wcf用basichttp访问,http在wcf最大并发是2,所以要设置 System.Net.ServicePointManager.DefaultConnectionLimit = 1000; 就解决了

devsuperdata | 园豆:4 (初学一级) | 2018-02-01 23:24
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册