C# 神奇的Web services 请求超时问题 排查分析

服务器上有两个接口,一个是Web Services(asmx文件)接口,一个是MVC API (普通的GET请求接口)

神奇的事情是这样的,只要我使用WebRequest请求两次,再使用Web Services 就超时,怎么也不行。

 static void Main()
        {
            
            //连续两次请求使用WebRequest 
            GetRequest();
            GetRequest();

            //此处请求web servics 超时。。。
            ServiceReference1.WebService1SoapClient clent = new ServiceReference1.WebService1SoapClient("WebService1Soap", "http://" + ServerAddress + "/WebService1.asmx");
            string result = clent.HelloWorld();

            Console.WriteLine(result);
            Console.ReadKey();
        }
         
        public static void GetRequest()
        {
            string UpdateReportStatusURL = "http://" + ServerAddress + "/API/Default/updateReportStatus?sglno=234";
            string url = UpdateReportStatusURL;
            WebRequest wq = WebRequest.Create(url);
            WebResponse response = wq.GetResponse();
            response.GetResponseStream();
           // response.Dispose();
        }

111807-20190422182552745-35874068.png

排查

WebRequest 和 WebService1SoapClient 请求的是同一台服务器,会复用TCP链接。
当使用WebRequest 连接后,TCP被挂起,导致Web Services 一直等待连接直到超时。。

注意,抓包不能使用Fiddler,因为Fiddler是代理,只要Fidder会自己和服务器建立TCP,只要打开Fiddler就好了。

修复

response 使用完成后,要释放对象。不然response会占用TCP,导致Web Services 超时。。
response.Dispose();

经验学习

WebRequest 和 WebService1SoapClient 虽然是不同的对象,但是.NET发现请求同一个地址时,会复用TCP端口。

https://github.com/zifeiniu/TestBugWebServices

转载于:https://www.cnblogs.com/zifeiniu/p/10752003.html

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值