zoukankan      html  css  js  c++  java
  • 20080403 Microsoft.Web.Preview 中 Maximum length exceeded 问题的解决

    最近在项目里使用了 Microsoft.Web.Preview.dll 中的客户端脚本技术,具体来说是 DataTableConverter,一个服务端DataTable到客户端 DataTable 的序列化传递技术。测试版上没有任何问题,正式版上就出现了 PageMethods 调用页面静态方法失败的问题。调试跟入,发现逻辑层的方法是正常返回 DataTable 的。但一转到页面层,就直接跳入onGetFailed里了。

    源代码之前无秘密,从页面静态方法返回到页面脚本执行之间又发生了什么呢?我们从源代码无从知晓。这种不能通过 trace 源代码得到错误根源的状况让人恼火。

    静心分析,PageMethods直接调用页面静态方法的方式其实是 ASP.NET AJAX 框架为我们在页面生成了相应的 Web Service 调用代码。而测试版和正式版的差别在什么地方呢?

    是数据库!而检查数据库,发现数据是一致的。唯一的差别在于正式版上数据比测试版上多。而在编写 onGetFailed 的脚本方法里没有将 Exception 信息显示出来给用户。打开Exception,发现Message是Maximum length exceeded。马上明白了,是 Web Service 传递的数据量超过了默认设置。

    寻找这个选项,在Web.Config里,<jsonSerialization>标签里加上maxJsonLength="10240000"属性。刷新页面,一切正常了。最终为:

    <webServices>
      <jsonSerialization maxJsonLength="10240000">
        <converters>
          <add name="DataSetConverter" type="Microsoft.Web.Preview.Script.Serialization.Converters.DataSetConverter, Microsoft.Web.Preview, Version=1.3.61025.0, Cultrue=neutral, PublicKeyToken=31bf3856ad364e35"/>
          <add name="DataRowConverter" type="Microsoft.Web.Preview.Script.Serialization.Converters.DataRowConverter, Microsoft.Web.Preview, Version=1.3.61025.0, Cultrue=neutral, PublicKeyToken=31bf3856ad364e35"/>
          <add name="DataTableConverter" type="Microsoft.Web.Preview.Script.Serialization.Converters.DataTableConverter, Microsoft.Web.Preview, Version=1.3.61025.0, Cultrue=neutral, PublicKeyToken=31bf3856ad364e35"/>
        </converters>
      </jsonSerialization>
    </webServices>

    另外,如果页面向服务器发送数据,则个限制在<httpRuntime />里配置,具体请查询帮助文档。

    总结,源码之前,没有秘密,当遇到编程问题无法解决时,则静心调试;当调试到没有源代码时,则静心思考根源,还是一样,有秘密,只是因为没有那部分源码。

    计算机真是头逻辑的动物。

     

  • 相关阅读:
    Golang-单元测试
    Golang-Json序列化和反序列化
    Golang-文件操作
    Golang-demo
    Golang-demo练习
    Golang-类型断言
    Golang-面向对象编程三大特性-多态
    Golang-接口(interface)
    Golang-面向对象编程三大特性-继承、多重继承
    块状元素和内联元素 【转】
  • 原文地址:https://www.cnblogs.com/likun/p/1136699.html
Copyright © 2011-2022 走看看