VB.net 2010 视频教程 VB.net 2010 视频教程 VB.net 2010 视频教程
SQL Server 2008 视频教程 c#入门经典教程 Visual Basic从门到精通视频教程
当前位置:
首页 > 编程开发 > C#编程 >
  • C#教程之C# 神奇的Web services 请求超时问题 排查分

  • 2019-07-11 22:37 来源:未知

服务器上有两个接口,一个是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();
        }

排查

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

相关教程