【问题标题】:Request Timed Out error when JSon CallJSON调用时请求超时错误
【发布时间】:2018-01-04 03:17:02
【问题描述】:

我用 Newtonsoft 创建了一个 JSON 对象。当我想将它传递给 RESTful Web 服务并希望从中响应时,我收到“请求超时”错误,尽管我将请求的超时设置为 -1 或任何值。问题出在哪里?

HttpWebRequest request = (HttpWebRequest)WebRequest.Create("https://app.myservice.com/sendJSon");
    request.ContentType = "text/json";
    request.Method = "POST";
    request.Timeout = 200000;

    JObject asnInfo = CreateAsnInfo();

    JsonSerializer serializer = new JsonSerializer();
    using (var streamWriter = new StreamWriter(request.GetRequestStream()))
    {
        using (var writer = new JsonTextWriter(streamWriter))
        {
            serializer.Serialize(writer, asnInfo);
        }
    }
    var response = (HttpWebResponse)request.GetResponse();
    using (var streamReader = new StreamReader(response.GetResponseStream()))
    {
        var responseText = streamReader.ReadToEnd();
    }

【问题讨论】:

    标签: c# asp.net json web-services rest


    【解决方案1】:

    你在代理后面吗?该代码似乎适用于公共测试网络服务。

    Link to .NET Fiddle working example

    using System;
    using System.IO;
    using System.Net;
    using Newtonsoft.Json;
    using Newtonsoft.Json.Linq;
    
    public class Program
    {
        public static void Main()
        {
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://jsonplaceholder.typicode.com/posts");
            request.ContentType = "text/json";
            request.Method = "POST";
            request.Timeout = 200000;
    
            JObject asnInfo = JObject.Parse(@"{ title: 'foo', body: 'bar', userId: 1 }");
    
            JsonSerializer serializer = new JsonSerializer();
    
            using (var streamWriter = new StreamWriter(request.GetRequestStream()))
            {
                using (var writer = new JsonTextWriter(streamWriter))
                {
                    serializer.Serialize(writer, asnInfo);
                }
            }
    
            var response = (HttpWebResponse)request.GetResponse();
    
            using (var streamReader = new StreamReader(response.GetResponseStream()))
            {
                var responseText = streamReader.ReadToEnd();
    
                Console.WriteLine(responseText);
            }
        }
    }
    

    【讨论】:

    • 我在本地主机上运行它。您的样品工作正常。但我的代码仍然存在超时问题。
    • 另外,我和你一样在 .NET Fiddle 中测试了我的示例。结果是:运行时异常(第-1行):超出执行时间限制堆栈跟踪:[DotNetFiddle.Infrastructure.LimitExceededException:超出执行时间限制]
    • 您在WebRequest.Create("...") 中使用的网址是什么?确保它是可公开访问的有效 URL。如果你能分享你的整个 .NET Fiddle,那真的很有帮助。
    猜你喜欢
    • 2017-09-27
    • 2019-10-25
    • 1970-01-01
    • 2020-04-28
    • 1970-01-01
    • 1970-01-01
    • 2015-03-20
    • 1970-01-01
    相关资源
    最近更新 更多