Ошибка WCF 400 Неверный запрос при отправке сообщения размером более 100 МБ - PullRequest
0 голосов
/ 15 января 2019

Я сделал свой первый сервис WCF, где я получаю данные, которые должен обработать. Проблема возникает, когда я отправляю большие объемы, мыло сообщения 100 Мб, данных сразу, я получаю ответ Ошибка 400 Bad Request.

Я попытался установить maxReceivedMessageSize, maxBufferSize, maxAllowedContentLength, readerQuotas, на которые есть ссылки в других вопросах, но, похоже, ничего не работает или просто не позволяет сервису вообще работать.

Это текущие настройки в моем web.config

<services>
  <service name="RMQServices.RMQ_WS1" behaviorConfiguration="MyServiceTypeBehaviors">
        <endpoint address="webHttp" contract="RMQServices.RMQService" binding="basicHttpBinding" bindingConfiguration="myBasic" />
    </service>
</services>

<bindings>
    <basicHttpBinding>
        <binding name="myBasic" maxReceivedMessageSize="2147483647" maxBufferSize="2147483647" sendTimeout="00:30:00">
            <readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" maxArrayLength="2147483647"/>
            <security mode="TransportCredentialOnly">
                <transport clientCredentialType="Windows" />
            </security>
        </binding>
    </basicHttpBinding>
</bindings>

<requestFiltering>          
    <requestLimits maxAllowedContentLength="2147483647" />
</requestFiltering>

Я все еще что-то упускаю в конфиге, чтобы он работал и принимал большие запросы?

EDIT: Если я отправляю данные через сервисную ссылку, он принимает даже мыльные сообщения объемом 1 ГБ. Но если я попытаюсь отправить его через HttpWebRequest с готовым SOAP XML, он все равно возвращает неверный запрос. Таким образом, проблема заключается в том, как я отправляю данные.

Ответы [ 2 ]

0 голосов
/ 16 января 2019

Пожалуйста, попробуйте добавить следующие фрагменты кода.

    <behaviors>
      <serviceBehaviors>
        <behavior name="mybehavior">
          <serviceMetadata httpGetEnabled="true" httpsGetEnabled="true"/>
          <serviceDebug includeExceptionDetailInFaults="false"/>
          <dataContractSerializer maxItemsInObjectGraph="2147483647"/>
        </behavior>
      </serviceBehaviors>
    </behaviors>
  </system.serviceModel>
  <system.web>
    <httpRuntime maxRequestLength="2147483647" executionTimeout="3600" />
  </system.web>
</configuration>

Кроме того, не забудьте применить конфигурацию между клиентской и серверной сторонами (вы также должны добавить эту конфигурацию как на стороне клиента, так и на стороне сервера).
Не стесняйтесь сообщить мне, если проблема все еще существует.

0 голосов
/ 15 января 2019

убедитесь, что ваш клиентский конфиг также имеет эти значения

<client>
      <endpoint address="[address]" binding="basicHttpBinding" bindingConfiguration="myBasic" contract="" name="Name" />
</client>

А затем добавить

<bindings>


    <basicHttpBinding>
        <binding name="myBasic" maxReceivedMessageSize="2147483647" maxBufferSize="2147483647" sendTimeout="00:30:00">
            <readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" maxArrayLength="2147483647"/>
            <security mode="TransportCredentialOnly">
                <transport clientCredentialType="Windows" />
            </security>
        </binding>
    </basicHttpBinding>
</bindings>

если это не работает, удалите защиту из привязки и затем подтвердите

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