Ошибка WCF Ошибка MaxReceivedMessageSize [дубликат]

Вам нужно указать столбец low на дату класса, а затем вы можете использовать datediff() в комбинации с lit(). Использование Spark 2.2:

from pyspark.sql.functions import datediff, to_date, lit

df.withColumn("test", 
              datediff(to_date(lit("2017-05-02")),
                       to_date("low","yyyy/MM/dd"))).show()
+----------+----+------+-----+
|       low|high|normal| test|
+----------+----+------+-----+
|1986/10/15|   z|  null|11157|
|1986/10/15|   z|  null|11157|
|1986/10/15|   c|  null|11157|
|1986/10/15|null|  null|11157|
|1986/10/16|null|   4.0|11156|
+----------+----+------+-----+

Использование & lt; Spark 2.2, нам нужно сначала преобразовать столбец low в класс timestamp:

from pyspark.sql.functions import datediff, to_date, lit, unix_timestamp

df.withColumn("test", 
              datediff(to_date(lit("2017-05-02")),
                       to_date(unix_timestamp('low', "yyyy/MM/dd").cast("timestamp")))).show()
421
задан marc_s 19 June 2014 в 05:36
поделиться

13 ответов

Вы хотите, чтобы что-то вроде этого увеличивало квоты размера сообщения в файле App.config или Web.config :

<bindings>
    <basicHttpBinding>
        <binding name="basicHttp" allowCookies="true"
                 maxReceivedMessageSize="20000000" 
                 maxBufferSize="20000000"
                 maxBufferPoolSize="20000000">
            <readerQuotas maxDepth="32" 
                 maxArrayLength="200000000"
                 maxStringContentLength="200000000"/>
        </binding>
    </basicHttpBinding>
</bindings>

И используйте имя привязки в конфигурации вашей конечной точки, например

...
bindingConfiguration="basicHttp"
...

Обоснование значений прост, они достаточно велики, чтобы разместить большинство сообщений. Вы можете настроить это число в соответствии с вашими потребностями. Низкое значение по умолчанию в основном предотвращает атаки типа DOS. Чтобы сделать его 20000000, чтобы распределенная DOS-атака была эффективной, размер по умолчанию для 64k потребовал бы очень большого количества клиентов, чтобы в большинстве случаев превосходить большинство серверов.

548
ответ дан Bruno Bieri 22 August 2018 в 13:49
поделиться
  • 1
    Спасибо .. Это изменение необходимо сделать в файле web.config клиентского приложения. – bugBurger 19 May 2009 в 19:08
  • 2
    Вам также может потребоваться изменить его на сервере - если вам нужно отправить большой набор данных в качестве параметра в метод WCF. – Nate 19 May 2009 в 20:08
  • 3
    Его достаточно большой, чтобы вмещать большинство сообщений. Вы можете настроить это число в соответствии с вашими потребностями. В основном это предотвращает атаки типа DOS. Чтобы сделать его 20000000, чтобы распределенная DOS-атака была эффективной, размер по умолчанию для 64k потребовал бы очень большого количества клиентов, чтобы одолеть большинство серверов в эти дни. – Nate 1 June 2010 в 23:49
  • 4
    Для других, кого это интересует, я читаю в другом блоге, что максимальный размер - 2147483647. 20000000 немного меньше этого числа, поэтому использование наименьшего числа, с которым вы можете обойтись без прерывания обслуживания, имеет смысл. – proudgeekdad 7 October 2010 в 17:22
  • 5

Для меня все, что мне нужно было сделать, это добавить maxReceivedMessageSize="2147483647" к клиенту app.config. Сервер остался нетронутым.

0
ответ дан ashilon 22 August 2018 в 13:49
поделиться

Еще одна важная вещь, которую я должен учитывать из своего опыта.

Я бы настоятельно советовал НЕ максимизировать maxBufferPoolSize, потому что буферы из пула никогда не выпускаются до тех пор, пока не вернется домен приложения (т.е. пул приложений).

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

Подробнее здесь:

84
ответ дан Community 22 August 2018 в 13:49
поделиться
  • 1
    Где я могу использовать этот код? – hmahdavi 7 March 2017 в 06:49
  • 2
    Вы можете использовать его для инициализации. Ясно, что вы можете использовать его в своем методе конструктора. – aemre 29 December 2017 в 14:28

Я получил эту ошибку при использовании этих настроек в файле web.config

System.ServiceModel.ServiceActivationException

. Я установил такие настройки, как это:

      <service name="idst.Controllers.wcf.Service_Talks">
    <endpoint address="" behaviorConfiguration="idst.Controllers.wcf.Service_TalksAspNetAjaxBehavior"
      binding="webHttpBinding" contract="idst.Controllers.wcf.Service_Talks" />
  </service>
  <service name="idst.Controllers.wcf.Service_Project">
    <endpoint address="" behaviorConfiguration="idst.Controllers.wcf.Service_ProjectAspNetAjaxBehavior"
      binding="basicHttpBinding" bindingConfiguration="" bindingName="largBasicHttp"
      contract="idst.Controllers.wcf.Service_Project" />
  </service>
</services>

<bindings>
<basicHttpBinding>
    <binding name="largBasicHttp" allowCookies="true"
             maxReceivedMessageSize="20000000"
             maxBufferSize="20000000"
             maxBufferPoolSize="20000000">
        <readerQuotas maxDepth="32"
             maxArrayLength="200000000"
             maxStringContentLength="200000000"/>
    </binding>
</basicHttpBinding>

1
ответ дан FARHAD AFSAR 22 August 2018 в 13:49
поделиться
  • 1
    Таким образом, вы исправили свою проблему, используя ответ Nate, а затем разместили ее как свою. Не круто. – arcain 29 March 2013 в 03:24
  • 2
    Ответ @arcain Nates был очень общим, используя имена акций и цифры, которые можно ожидать часто появляться. Этот ответ не был украден, это просто правильный ответ. Поскольку есть только один правильный ответ, он должен быть повторен. – kingfrito_5005 23 July 2015 в 20:52
  • 3
    @ kingfrito_5005 "Правильно" Ответ был уже здесь, когда ответчик опубликовал это. Он довольно четко поднял элемент [N1] Нейта и отправил его как часть своего ответа. Значения 2000000 довольно разные. – arcain 24 July 2015 в 15:05
  • 4
    @arcain, я не согласен, что это очень стандартные значения, моя компания также использует их в наших связующих элементах. – kingfrito_5005 24 July 2015 в 16:43

Я решил проблему на Bing Maps WPF в моем проекте. Используя CalculateRoute (). Решение в моем случае заключалось в установке maxReceivedMessageSize и maxReceivedMessageSize для атрибута «httpTransport» для раздела «customBinding».

Я установил в файле applications.config (например, myApp.config) эту конфигурацию:

<system.serviceModel>
    <bindings>
        <basicHttpBinding>
            <binding name="BasicHttpBinding_IGeocodeService" />
            <binding name="BasicHttpBinding_IRouteService" />
        </basicHttpBinding>
        <customBinding>
            <binding name="CustomBinding_IGeocodeService">
                <binaryMessageEncoding />
              <httpTransport manualAddressing="false" maxBufferPoolSize="524288"
                                maxReceivedMessageSize="2147483647" allowCookies="false" authenticationScheme="Anonymous"
                                bypassProxyOnLocal="false" decompressionEnabled="true" hostNameComparisonMode="StrongWildcard"
                                keepAliveEnabled="true" maxBufferSize="2147483647" proxyAuthenticationScheme="Anonymous"
                                realm="" transferMode="Buffered" unsafeConnectionNtlmAuthentication="false"
                                useDefaultWebProxy="true" />
            </binding>
            <binding name="CustomBinding_IRouteService">
                <binaryMessageEncoding />
              <httpTransport manualAddressing="false" maxBufferPoolSize="524288"
                                maxReceivedMessageSize="2147483647" allowCookies="false" authenticationScheme="Anonymous"
                                bypassProxyOnLocal="false" decompressionEnabled="true" hostNameComparisonMode="StrongWildcard"
                                keepAliveEnabled="true" maxBufferSize="2147483647" proxyAuthenticationScheme="Anonymous"
                                realm="" transferMode="Buffered" unsafeConnectionNtlmAuthentication="false"
                                useDefaultWebProxy="true" />
            </binding>
        </customBinding>
    </bindings>
    <client>
        <endpoint address="http://dev.virtualearth.net/webservices/v1/geocodeservice/GeocodeService.svc"
            binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_IGeocodeService"
            contract="BingServices.IGeocodeService" name="BasicHttpBinding_IGeocodeService" />
        <endpoint address="http://dev.virtualearth.net/webservices/v1/geocodeservice/GeocodeService.svc/binaryHttp"
            binding="customBinding" bindingConfiguration="CustomBinding_IGeocodeService"
            contract="BingServices.IGeocodeService" name="CustomBinding_IGeocodeService" />
        <endpoint address="http://dev.virtualearth.net/webservices/v1/routeservice/routeservice.svc"
            binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_IRouteService"
            contract="BingServices.IRouteService" name="BasicHttpBinding_IRouteService" />
        <endpoint address="http://dev.virtualearth.net/webservices/v1/routeservice/routeservice.svc/binaryHttp"
            binding="customBinding" bindingConfiguration="CustomBinding_IRouteService"
            contract="BingServices.IRouteService" name="CustomBinding_IRouteService" />
    </client>
</system.serviceModel>
6
ответ дан Francesco Germinara 22 August 2018 в 13:49
поделиться

У тестируемого клиента WCF есть своя конфигурация клиента.

Запустите тестовый клиент и прокрутите вниз. Если вы дважды щелкните узел «Файл конфигурации», вы увидите представление XML. Как вы видите, maxReceivedMessageSize - 65536.

Чтобы отредактировать это, щелкните правой кнопкой мыши узел дерева файлов Config и выберите «Редактировать» с помощью SvcConfigEditor. Когда редактор откроет расширение Bindings и дважды щелкните ссылку, которая была автоматически сгенерирована.

Здесь вы можете редактировать все свойства, включая maxReceivedMessageSize. По завершении нажмите Файл - Сохранить .

Наконец, когда вы вернетесь в окно тестового клиента WCF, нажмите Tools - Options .

ПРИМЕЧАНИЕ: Снимите флажок Всегда восстанавливать конфигурацию, когда стартовые службы .

39
ответ дан furier 22 August 2018 в 13:49
поделиться
  • 1
    Наверное, лучший ответ здесь! – Haris 24 January 2014 в 10:28
  • 2
    из-за заметки, чтобы снять флажок Always regenerate config. – furier 17 February 2014 в 13:33
  • 3
    Проще всего решить, на мой взгляд. Успокоил мне головную боль. – Jared Beach 26 August 2014 в 16:55
  • 4
    На vs2013 SvcConfigEditor заменяет конфигурацию WCF, если люди ее ищут. – ZoomVirus 24 September 2014 в 12:28
  • 5
    Спасибо. Некоторое время я разбивал себе голову, меняя конфигурацию сервера снова и снова, когда проблема была связана с конфигурацией Test Client! – Fahad 15 March 2015 в 10:05

Не забывайте, что будет рассмотрен app.config точки ввода выполнения, а не тот, который в проекте библиотеки классов управляет вызовами Web-Service, если таковой существует.

Например, если вы получаете ошибка при запуске модульного теста, вам необходимо настроить соответствующую конфигурацию в проекте тестирования.

2
ответ дан Gab 22 August 2018 в 13:49
поделиться

<bindings>
  <wsHttpBinding>
    <binding name="wsHttpBinding_Username" maxReceivedMessageSize="20000000"          maxBufferPoolSize="20000000">
      <security mode="TransportWithMessageCredential">
        <message clientCredentialType="UserName" establishSecurityContext="false"/>
      </security>
    </binding>
  </wsHttpBinding>
</bindings>

<client>
  <endpoint
            binding="wsHttpBinding"
            bindingConfiguration="wsHttpBinding_Username"
            contract="Exchange.Exweb.ExchangeServices.ExchangeServicesGenericProxy.ExchangeServicesType"
            name="ServicesFacadeEndpoint" />
</client>

6
ответ дан Hemant Soni 22 August 2018 в 13:49
поделиться
  • 1
    Отлично подходит для публикации вашего ответа. Важно, чтобы "связывание конфигурации" значение соответствует имени привязки. В вашем примере «wsHttpBinding_Username». – Bruno Bieri 9 December 2015 в 10:06

Для HTTP:

<bindings>
  <basicHttpBinding>
    <binding name="basicHttp" allowCookies="true"
             maxReceivedMessageSize="20000000" 
             maxBufferSize="20000000"
             maxBufferPoolSize="20000000">
        <readerQuotas maxDepth="200" 
             maxArrayLength="200000000"
             maxBytesPerRead="4096"
             maxStringContentLength="200000000"
             maxNameTableCharCount="16384"/>
    </binding>
  </basicHttpBinding>
</bindings>

Для TCP:

<bindings>
  <netTcpBinding>
    <binding name="tcpBinding"
             maxReceivedMessageSize="20000000"
             maxBufferSize="20000000"
             maxBufferPoolSize="20000000">
      <readerQuotas maxDepth="200"
           maxArrayLength="200000000"
           maxStringContentLength="200000000"
           maxBytesPerRead="4096"
           maxNameTableCharCount="16384"/>
    </binding>
  </netTcpBinding>
</bindings>

ВАЖНО:

Если вы пытаетесь передать сложный объект с множеством подключенных объектов (например: структура данных дерева, список, в котором много объектов ...), связь будет терпеть неудачу независимо от того, как вы увеличили квоты. В таких случаях вы должны увеличить количество объектов:

<behaviors>
  <serviceBehaviors>
    <behavior name="NewBehavior">
      ...
      <dataContractSerializer maxItemsInObjectGraph="2147483646"/>
    </behavior>
  </serviceBehaviors>
</behaviors>
1
ответ дан Jacob 22 August 2018 в 13:49
поделиться

Я нашел простой способ

- щелкните правой кнопкой мыши файл конфигурации webconfig или app и нажмите EDIT CONFIGURATION для WCF и получите доступ к bingdigs ans select yore service и правой стороне show maxReciveMessageSize, чтобы получить большой число ---

16
ответ дан NC64 22 August 2018 в 13:49
поделиться
  • 1
    Это был отличный ответ, я не знал, что могу редактировать здесь, спасибо – albert sh 30 May 2017 в 19:20

Я решаю задачу ... следующим образом

    <bindings>
  <netTcpBinding>
    <binding name="ECMSBindingConfig" closeTimeout="00:10:00" openTimeout="00:10:00"
      sendTimeout="00:10:00" maxBufferPoolSize="2147483647" maxBufferSize="2147483647"
      maxReceivedMessageSize="2147483647" portSharingEnabled="true">
      <readerQuotas maxArrayLength="2147483647" maxNameTableCharCount="2147483647"
          maxStringContentLength="2147483647" maxDepth="2147483647"
          maxBytesPerRead="2147483647" />
      <security mode="None" />
    </binding>
  </netTcpBinding>
</bindings>
<behaviors>
  <serviceBehaviors>
    <behavior name="ECMSServiceBehavior">
      <dataContractSerializer ignoreExtensionDataObject="true" maxItemsInObjectGraph="2147483647" />
      <serviceDebug includeExceptionDetailInFaults="true" />
      <serviceTimeouts transactionTimeout="00:10:00" />
      <serviceThrottling maxConcurrentCalls="200" maxConcurrentSessions="100"
        maxConcurrentInstances="100" />
    </behavior>
  </serviceBehaviors>
</behaviors>
7
ответ дан Rajesh Kuamr Chekuri 22 August 2018 в 13:49
поделиться
  • 1
    Как это отличается от моего решения? Помимо вас были включены все ненужные части вашей конфигурации, а также соответствующие части, и вы выбрали максимально возможное значение вместо 200 м, которые я выбрал? – Nate 6 April 2011 в 16:48
  • 2
    Контекст тоже хорош ... возможно, эти два ответа могут быть объединены? – Jeff 30 June 2011 в 20:08
  • 3
    что настройка должна быть настроена на сервере или клиенте? – John Kenedy 13 December 2011 в 08:23

Если вы все еще получаете это сообщение об ошибке при использовании тестового клиента WCF, это связано с тем, что у клиента есть отдельный параметр MaxBufferSize.

Чтобы исправить ошибку:

  1. Щелкните правой кнопкой мыши узел «Файл конфигурации» в нижней части дерева
  2. Выберите «Редактировать» с помощью SvcConfigEditor
  3. ]

Появится список редактируемых настроек, включая MaxBufferSize.

Примечание: Автогенерированные прокси-клиенты также устанавливают MaxBufferSize на 65536 по умолчанию .

137
ответ дан ѺȐeallү 22 August 2018 в 13:49
поделиться
  • 1
    Почему, почему я всегда забываю об этом? +1 – James Skemp 20 August 2012 в 15:02
  • 2
  • 3
    Не удалось найти SVCconfigEditor? – Arul Sidthan 17 December 2014 в 15:11
  • 4
    Вы найдете его в папке Bindings, нажмите на ссылку для обслуживания, и она там. – Sameer 6 February 2015 в 23:00
  • 5
    Если ваш конфигурационный файл сгенерирован автоматически, вам абсолютно необходимо это сделать. Каждый раз, когда вы обновляете свою ссылку, он будет восстанавливать app.config, и вам придется вручную изменить его снова. Если вы измените его VS, новые изменения будут соответствовать выбранным вами настройкам. – kingfrito_5005 23 July 2015 в 20:40
87
ответ дан Community 5 November 2018 в 11:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: