2011-01-27 292 views
0

我正在修整fusemail在asp.net 2.0中。我使用HttpWebRequest来请求API页面。最近我发现HttpWebRequest第一次失败,然后继续并且后续请求成功。为什么HttpWebRequest第一次失败,然后工作正常?

说(我知道如果我使用goto这是一个不好的编程方法),如果我使用此代码

retry: 
     try 
     { 
      Uri uri = new Uri("http://www.fusemail.com/api/request.html"); 
      if (uri.Scheme == Uri.UriSchemeHttp) 
      { 

       HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(uri); 
       request.PreAuthenticate = true; 
       request.Method = 
       WebRequestMethods.Http.Post; 

       //request.ReadWriteTimeout = System.Threading.Timeout.Infinite; 
       //request.Timeout = System.Threading.Timeout.Infinite; 
       request.ContentLength = data.Length; 
       request.ContentType = 
       "application/x-www-form-urlencoded"; 
       //request.UserAgent = Request.UserAgent; 
       request.UserAgent = "Mozilla/4.0"; 
       request.KeepAlive = false; 

       request.ServicePoint.Expect100Continue = true; 
       //request.Accept = "Accept: text/html,application/xhtml+xml,application/xml"; 


       StreamWriter writer = new StreamWriter(request.GetRequestStream()); 
       writer.Write(data); 
       writer.Close(); 

       HttpWebResponse response = (HttpWebResponse)request.GetResponse(); 

       StreamReader reader = new StreamReader(response.GetResponseStream()); 
       string tmp = reader.ReadToEnd(); 
       response.Close(); 
       //Response.Write(tmp); 

       if (!String.IsNullOrEmpty(tmp)) 
       { 
        return tmp; 
       } 
      } 
      return String.Empty; 
     } 
     catch (WebException ex) 
     { 

      goto retry; 
     } 

这一次失败后的作品。如果发生错误,我正在写入一个文本文件,并且在我失败的请求后,它第二次运行。我正在使用ASP.Net 2.0,并且该网站托管在Windows Server 2008 Standard的IIS 7上。此外查验API地址失败的第一次,然后响应

C:\>ping 67.207.202.118 

Pinging 67.207.202.118 with 32 bytes of data: 
Reply from 192.168.0.253: **Destination host unreachable**. 
Reply from 67.207.202.118: bytes=32 time=218ms TTL=49 
Reply from 67.207.202.118: bytes=32 time=218ms TTL=49 
Reply from 67.207.202.118: bytes=32 time=217ms TTL=49 

Ping statistics for 67.207.202.118: 
    Packets: Sent = 4, Received = 4, Lost = 0 (0% loss), 
Approximate round trip times in milli-seconds: 
    Minimum = 217ms, Maximum = 218ms, Average = 217ms 

第一次它HttpWebRequest的失败,失败,此错误

System.Net.WebException:无法连接到远程服务器 - - > System.Net.Sockets.SocketException:连接尝试失败,因为连接方在一段时间后没有正确响应,或由于连接的主机未能响应而建立连接失败67.207.202.118:80

是第一次有认证问题?我在一些论坛上看到它首先发送401 Unauthorized,然后它可以连接。我无法使用Fiddler来验证这一点。

IIS配置有什么问题吗?

+1

不知道。如果您的ping失败,那么它指向您环境中的网络问题。您可以尝试创建system.net跟踪日志(请参阅http://ferozedaud.blogspot.com/2009/08/tracing-with-systemnet.html)并查看日志文件以了解HWR在网络层看到的内容。 – feroze 2011-01-27 18:02:11

+0

从命令行尝试telnet 67.207.202.118 80,查看是否可以在端口80上打开机器的套接字。另外,您粘贴的ping跟踪第一次尝试了不同的ip-192.168.0.253? – 2011-02-23 11:35:49

回答

1

这不是一个编程问题,我后来遇到了类似的问题,这是由于ISA服务器/防火墙设置导致的网络配置问题。 你必须联系你的网络管理员来检查这个问题。

我希望这对你有所帮助。

你的,

穆罕默德·卡迈勒Elbeah

高级.NET开发人员

相关问题