none
Передача большого текста из textarea в веб-сервис RRS feed

  • Вопрос

  • Проблема - при вводе большого объема текста ~ 300 Кб в textarea и передаче данного текста вебсервису возникает предупреждение в internet explorer 8 ,

    ---------------------------
    Windows Internet Explorer
    ---------------------------
    Остановить выполнение этого сценария?

    Сценарий на этой веб-странице замедляет работу Internet Explorer.
    Если не остановить сценарий, компьютер может перестать
    реагировать на действия пользователя.
    ---------------------------
    Да   Нет  
    ---------------------------

    Код страницы следующий :


     Веб сервис test.asmx содержит пустой метод LoadText.




    [System.Web.Script.Services.ScriptService] [WebService(Namespace = "http://tempuri.org/")] [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]


    public
    class test : System.Web.Services.WebService { public test() { //Uncomment the following line if using designed components //InitializeComponent(); } [WebMethod] public int LoadText(string text) { return -1; } }


    В web.config добавлена строчка для увеличения буфера сериализации 

    Похоже что javascript тормозит на этапе сериализации перед отправкой данных веб-сервису, в результате чего появляется предупреждение.
    Каким образом решать данную проблему ?

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

     

    <%@ Page Language="C#" AutoEventWireup="true" CodeFile="test_ws.aspx.cs" Inherits="test_ws" %>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" >
    <head runat="server">
    <title>Untitled Page</title>
    </head>
    <body> 
    <script type="text/javascript" >
    function service_LoadText()
    {
       test.LoadText( document.getElementById('text_source').value, service_OnSuccess );
    }
    
    function service_OnSuccess( result )
    {
    }
    </script>
    <form id="form1" runat="server">
      <asp:ScriptManager ID="ScriptManager1" runat="server">
      <Services>
        <asp:ServiceReference Path="test.asmx" InlineScript="true" />
      </Services> 
      </asp:ScriptManager>
      <div>
         <textarea id="text_source" cols="60" rows="20"></textarea> 
         <a href="#" target="_self" onclick="service_LoadText(); return false;" >Загрузить текст</a>
      </div>
    </form>
    </body>
    </html>

     

    • Изменен тип Pashz 28 сентября 2009 г. 13:04
    28 сентября 2009 г. 12:52

Ответы

  • А если побить тект на более мелкие куски и передавать его по частям, собирая в целое уже на Server-Side? Вы получите несколько плюсов (кроме минуса небольшого усложнения кода):
    1. Избавитесь от "тормозов" (если тормозит JavaScript, то уж....)
    2. Сможете показывать пользователю progress bar загрузки (что более комфортно для пользователя, чем ждать "зависший UI")
    3. Сможете предоставить пользователю функциональность "Cancel", если он передумал в процессе загрузки.
    • Предложено в качестве ответа I.Vorontsov 19 октября 2009 г. 6:02
    • Помечено в качестве ответа I.Vorontsov 27 октября 2009 г. 6:28
    1 октября 2009 г. 18:11