Мыльная служба .NET WCF не возвращает ответа из-за размера запроса - PullRequest
0 голосов
/ 06 ноября 2018

У меня есть мыльная служба WCF, которую я пытался вызвать из SoapUI и моей Java-программы. Я читаю файл Excel со стороны Java и отправляю его на сторону .NET.

Файл Excel имеет 37 столбцов и может содержать до 100 строк. Я читаю все строки по одной и добавляю их в список. В одном элементе списка есть список объектов значения ключа каждой ячейки в одной строке.

Вот моя проблема. Сервис работает хорошо для ограниченного числа строк. Я посмотрел на максимальную длину контента, которую я мог успешно отправить, которая составляет 65536. Если я отправляю запрос с длиной контента более 65536, служба ничего не возвращает.

Если я отправляю запрос из проекта Java, я получаю эту ошибку:

Не удалось отправить сообщение .; вложенным исключением является org.apache.cxf.transport.http.HTTPException: HTTP-ответ «400: неверный запрос» при обмене данными с ...

В файле web.config проекта .NET я не знаю никаких ограничений относительно размера запроса.

Web.Config

<system.web>
  <compilation targetFramework="4.0" debug="true"/>
  <httpRuntime/>
</system.web>

Мой запрос от SoapUI

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:tem="http://tempuri.org/" xmlns:pas="http://schemas.datacontract.org/2004/07/..." xmlns:pas1="http://schemas.datacontract.org/2004/07/..." xmlns:arr="http://schemas.microsoft.com/2003/10/...">
   <soapenv:Header/>
   <soapenv:Body>
      <tem:ListSegments>
         <!--Optional:-->
         <tem:request>
            <!--Optional:-->
            <pas:UserName>tst</pas:UserName>
            <!--Optional:-->
            <pas1:DetailList>
               <!--Zero or more repetitions:-->
               <arr:ArrayOfKeyValueOfstringstring>
                  <!--Zero or more repetitions:-->
                  <arr:KeyValueOfstringstring>
                     <arr:Key>No</arr:Key>
                     <arr:Value>1</arr:Value>
                  </arr:KeyValueOfstringstring>
                  ....
               </arr:ArrayOfKeyValueOfstringstring>
               <arr:ArrayOfKeyValueOfstringstring>
                  <!--Zero or more repetitions:-->
                  <arr:KeyValueOfstringstring>
                     <arr:Key>No</arr:Key>
                     <arr:Value>2</arr:Value>
                  </arr:KeyValueOfstringstring>
                  ....
               </arr:ArrayOfKeyValueOfstringstring>
               ....
            </pas1:DetailList>
          <tem:request>
       <tem:ListSegments>
    <soapenv:Body>
</soapenv:Envelope>

1 Ответ

0 голосов
/ 06 ноября 2018

Существуют значения по умолчанию для ограничений. Одним из них является maxAllowedContentLength, значение по умолчанию которого должно составлять 30000000, что составляет примерно 28,6 МБ. Так что, вероятно, это не то, что вы испытываете.

<system.webServer>
    <security>
        <requestFiltering>
            <requestLimits maxAllowedContentLength="500000000"/>
        </requestFiltering>
    </security>
</system.webServer>

Это может быть maxReceivedMessageSize, который обычно устанавливается в части привязок файла web.config, которого у вас, похоже, нет. Может быть, они установлены в коде?

<basicHttpBinding>
  <binding maxBufferSize="2147483647" maxBufferPoolSize="2147483647" maxReceivedMessageSize="2147483647">
    <readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647" maxArrayLength="2147483647" 
       maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" />
  </binding>
</basicHttpBinding>

Возможно, существует файл конфигурации более высокого уровня, в котором установлено значение по умолчанию. Это может быть файл machine.config или другой файл Web.config в зависимости от настройки (если это выполняется в IIS).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...