Как исправить ошибку 404 «Не найдено» при попытке отправить большой объем данных в веб-сервис - PullRequest
0 голосов
/ 23 марта 2019

У меня есть веб-сервис, который позволяет клиенту получать запросы из базы данных и запускать их на клиентском компьютере, отправляя результаты обратно в веб-сервис.Эти результаты анализируются из Datatable в xml и затем отправляются с использованием WebClient.UploadValues.Я могу отправлять и получать запросы / результаты, если они невелики (возвращает только несколько тысяч строк), но когда запрос возвращает сотни тысяч результатов, строка xml становится довольно большой (в частности, с которой я сейчас работаю)70mb), и веб-служба возвращает 404. Not Found.

Я уже увеличил maxAllowedContentLength, maxRequestLength и executeTimeout в web.config для веб-службы.Просто кажется, что клиент даже не пытается отправить данные в веб-сервис до того, как он получит эту ошибку.Есть ли способ сказать, в чем истинная проблема (ограничение строковой переменной xml?)?Код для отправки данных в веб-сервис ниже:

    Using wc As New WebClient()
        Try
            Dim nvc As New NameValueCollection
            nvc.Add("params", myParameters)
            wc.UploadValues(URI, nvc)

        Catch ex As WebException
            eLog.WriteEntry("Application", My.Application.Info.AssemblyName + " - " + ex.Message)
        End Try
    End Using

Я также попробовал этот метод:

    Try
        Dim client As New HttpClient()
        client.Timeout = TimeSpan.FromSeconds(300)
        Dim request As New HttpRequestMessage(HttpMethod.Post, URI)
        request.Content = New StringContent(myParameters)

        Dim response = client.SendAsync(request, HttpCompletionOption.ResponseContentRead)

    Catch ex As HttpRequestException
        eLog.WriteEntry("Application", My.Application.Info.AssemblyName + " - " + ex.Message)
    End Try

1 Ответ

0 голосов
/ 23 марта 2019

Через 6 часов я случайно решил переставить maxAllowedContentLength в web.config, и это решило проблему. Я не знаю правильное позиционирование для тега "security", но если поставить его так, это решило мою проблему:

  <system.web>
    <compilation debug="true" targetFramework="4.6.1" />
    <httpRuntime targetFramework="4.6.1" maxRequestLength="2097152" executionTimeout="3600" />
  </system.web>
  <system.webServer>
    <defaultDocument>
      <files>
        <clear />
        <add value="Home.html" />
      </files>
    </defaultDocument>
    <security>
      <requestFiltering>
        <requestLimits maxAllowedContentLength="2147483648" />
      </requestFiltering>
    </security>
    <handlers>
      <remove name="ExtensionlessUrlHandler-Integrated-4.0" />
      <remove name="OPTIONSVerbHandler" />
      <remove name="TRACEVerbHandler" />
      <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
    </handlers>
  </system.webServer>
...