开发者社区> 问答> 正文

System.Net.WebException: 操作超时

阿里云视频点播sdk,请求接口提示:

HttpWebRequest WebException occured, the request url is vod.cn-shanghai.aliyuncs.com System.Net.WebException: 操作超时

在 System.Net.HttpWebRequest.GetResponse()

在 Aliyun.Acs.Core.Http.HttpResponse.GetResponse(HttpRequest request, Nullable`1 timeout)

有遇到相同问题的吗?求帮助!

展开
收起
骑蜗牛走世界 2020-06-16 14:44:15 5589 0
1 条回答
写回答
取消 提交回答
  • 原因一:

    连接超时时间 Timeout 以及写入Post数据超时时间 ReadWriteTimeout 设置得太短,一般要设置大于6000ms。

    原因二:

    Expect100Continue 属性的值设置为了true,将 Expect100Continue 属性的值设置为 false 即可解决问题。

    代码:

    public static string Post(string xml, string url, bool isUseCert, int timeout) { System.GC.Collect();//垃圾回收,回收没有正常关闭的http连接

    string result = "";//返回结果

    HttpWebRequest request = null; HttpWebResponse response = null; Stream reqStream = null;

    try { //设置最大连接数 ServicePointManager.DefaultConnectionLimit = 200; //设置https验证方式 if (url.StartsWith("https", StringComparison.OrdinalIgnoreCase)) { ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(CheckValidationResult); }

    /*************************************************************** * 下面设置HttpWebRequest的相关属性 * ************************************************************/ request = (HttpWebRequest)WebRequest.Create(url);

    request.Method = "POST"; request.Timeout = timeout * 1000;

    //设置代理服务器 //WebProxy proxy = new WebProxy(); //定义一个网关对象 //proxy.Address = new Uri(WxPayConfig.PROXY_URL); //网关服务器端口:端口 //request.Proxy = proxy;

    //设置POST的数据类型和长度 request.ContentType = "text/xml"; byte[] data = System.Text.Encoding.UTF8.GetBytes(xml); request.ContentLength = data.Length;

    //这个在Post的时候,一定要加上,如果服务器返回错误,他还会继续再去请求,不会使用之前的错误数据,做返回数据 request.ServicePoint.Expect100Continue = false;

    //是否使用证书 if (isUseCert) { string path = HttpContext.Current.Request.PhysicalApplicationPath; X509Certificate2 cert = new X509Certificate2(path + WxPayConfig.SSLCERT_PATH, WxPayConfig.SSLCERT_PASSWORD); request.ClientCertificates.Add(cert); Log.Debug("WxPayApi", "PostXml used cert"); }

    //往服务器写入数据 reqStream = request.GetRequestStream(); reqStream.Write(data, 0, data.Length); reqStream.Close();

    //获取服务端返回 response = (HttpWebResponse)request.GetResponse();

    //获取服务端返回数据 StreamReader sr = new StreamReader(response.GetResponseStream(), Encoding.UTF8); result = sr.ReadToEnd().Trim(); sr.Close(); } catch (System.Threading.ThreadAbortException e) { Log.Error("HttpService", "Thread - caught ThreadAbortException - resetting."); Log.Error("Exception message: {0}", e.Message); System.Threading.Thread.ResetAbort(); } catch (WebException e) { Log.Error("HttpService", e.ToString()); if (e.Status == WebExceptionStatus.ProtocolError) { Log.Error("HttpService", "StatusCode : " + ((HttpWebResponse)e.Response).StatusCode); Log.Error("HttpService", "StatusDescription : " + ((HttpWebResponse)e.Response).StatusDescription); } throw new WxPayException(e.ToString()); } catch (Exception e) { Log.Error("HttpService", e.ToString()); throw new WxPayException(e.ToString()); } finally { //关闭连接和流 if (response != null) { response.Close(); } if(request != null) { request.Abort(); } } return result; }

    2020-06-20 13:49:28
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载