【问题标题】:code fail when retrieving a larger amount of data from web service从 Web 服务检索大量数据时代码失败
【发布时间】:2011-11-21 23:58:20
【问题描述】:

我有一个 Web 服务将一些 Json 内容返回到我的 iPhone 应用程序,只要返回的数据量很小,它就可以正常工作,但是如果我增加返回的数据量,应用程序将无法处理它。有没有办法解决这个问题,不可能是218KB的限制......?

这是我当前的代码:

[WebService(Namespace = "http://mydomain.com/webservicesfeed")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.ComponentModel.ToolboxItem(false)]
// To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line. 
[System.Web.Script.Services.ScriptService]

    public class feedPerson : System.Web.Services.WebService
    {

        [WebMethod(BufferResponse = false)]
        [ScriptMethod(ResponseFormat = ResponseFormat.Json)]
        public List<Person> getData()
        {
            List<Person> res = new List<Person>();
                res = searchPerson("32.8762", "13.1875");
            return res;
        }
    }

如果我调用 web 服务 throw jQuery 它也会失败,所以我猜问题出在 web 服务上..

这是我用来试用的 jQuery 代码:

 <script type="text/javascript">
     $.ajax({
         type: "POST",
         contentType: "application/json; charset=utf-8;",
         url: "http://mydomain.com/feedPerson.asmx/getData",
         dataType: "json",
         success: function (data, textStatus, jqXHR) {
             alert(data.d[0]);
         },
         error: function (jqXHR, textStatus, errorThrown) {
             alert("Fail");
         }
     });
    </script>

如何解决?

【问题讨论】:

  • 您是否在 Web 服务中设置了断点?它会被调用吗? searchPerson 返回多少人?您可以使用 Web 浏览器向服务发出获取请求以查看返回的内容吗?你的 218k 号码是从哪里来的?
  • @DarrylBraaten 没有断点,它会被调用,100 人可以,但 150 人不行,如果我通过浏览器访问mydomain.com/persons.asmx/getData,它会返回一个包含所有人的 xml 文件(150 人没问题) , 218k 是返回的 xml 文件的大小。
  • 失败是什么?服务器或客户端是否抛出错误或异常?
  • @PhilippSchmid 我猜它是服务器,因为 iPhone 应用程序和 jquery 的响应是相同的。 request: {"Message":"处理请求时出错。","StackTrace":"","ExceptionType":""}
  • 您可以访问服务器吗?您是否在事件日志中看到任何可以告诉您出了什么问题的内容?或者更好的是,要么在你的服务器代码周围有一个 try/catch 块,要么附加一个调试器,让它告诉你异常是什么。一旦你知道出了什么问题,你应该能够解决问题(代码或配置)。

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


【解决方案1】:

捕获错误给了我以下信息:“字符串的长度超过了 maxJsonLength 属性上设置的值”。

然后我发现了这个帖子:Can I set an unlimited length for maxJsonLength in web.config?

并通过在我的 web.config 中设置以下内容:

<system.web.extensions>
    <scripting>
        <webServices>
            <jsonSerialization maxJsonLength="2147483647"/>
        </webServices>
    </scripting>
</system.web.extensions>

问题解决了。

【讨论】:

    【解决方案2】:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-03-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多