WCF 16384 максимальная длина массива - PullRequest
0 голосов
/ 22 декабря 2011

пытался решить это за день.Я не вижу, чтобы найти какие-либо ошибки с моим кодом, пожалуйста, помогите.Спасибо!Я использую IIS для размещения службы и использовал ссылку на службу добавления для клиента.Я убедился, что добавил квоту читателя и исправил настройки привязки.Тем не менее ошибка возникает, когда я отправляю файл изображения размером более 16384 КБ.

Server
<?xml version="1.0"?>
<configuration>

  <system.web>
    <compilation debug="true" targetFramework="4.0" />
  </system.web>
  <system.serviceModel>
    <bindings>
      <basicHttpBinding>
        <binding name="BasicHttpBinding_ICotfServerWCF" closeTimeout="00:01:00"
         openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
         allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"
         maxBufferSize="20000000" maxBufferPoolSize="20000000" maxReceivedMessageSize="20000000"
         messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered"
         useDefaultWebProxy="true">
          <readerQuotas maxDepth="32"
      maxStringContentLength="5242880"
      maxArrayLength="2147483646"
      maxBytesPerRead="4096"
      maxNameTableCharCount="5242880" />
          <security mode="None">
            <transport clientCredentialType="None" proxyCredentialType="None"
             realm="" />
            <message clientCredentialType="UserName" algorithmSuite="Default" />
          </security>
        </binding>
      </basicHttpBinding>
    </bindings>
    <services>
      <service name="ServerWCF.ICotfServerWCF">
        <endpoint address="http://192.168.2.140:8081/CotfServerWCF.svc" binding="basicHttpBinding" behaviorConfiguration="filebehavior" name="basicHttpBinding" bindingConfiguration="BasicHttpBinding_ICotfServerWCF" contract="ServerWCF.ICotfServerWCF" />
      </service>
    </services>



    <behaviors>
      <endpointBehaviors>
        <behavior name="filebehavior">
          <dataContractSerializer maxItemsInObjectGraph="2000000000"/>
        </behavior>
      </endpointBehaviors>
      <serviceBehaviors>
        <behavior>
          <!-- To avoid disclosing metadata information, set the value below to false and remove the metadata endpoint above before deployment -->
          <serviceMetadata httpGetEnabled="true"/>
          <!-- To receive exception details in faults for debugging purposes, set the value below to true.  Set to false before deployment to avoid disclosing exception information -->
          <serviceDebug includeExceptionDetailInFaults="true"/>
        </behavior>
      </serviceBehaviors>
    </behaviors>
    <serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
  </system.serviceModel>
  <system.webServer>
    <modules runAllManagedModulesForAllRequests="true"/>
  </system.webServer>

  <connectionStrings>
    <add name="databaseCS" connectionString="Data Source=(local);Initial Catalog=CotfDatabase;User ID=CotfDbUser; Password=$ing1234;"/>
  </connectionStrings>
</configuration>



Client
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <system.serviceModel>
        <bindings>
            <basicHttpBinding>
                <binding name="BasicHttpBinding_Client" closeTimeout="00:01:00"
                    openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
                    allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"
                    maxBufferSize="6553600" maxBufferPoolSize="5242880" maxReceivedMessageSize="6553600"
                    messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered"
                    useDefaultWebProxy="true">
                    <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="100000"
                        maxBytesPerRead="4096" maxNameTableCharCount="100000" />
                    <security mode="None">
                        <transport clientCredentialType="None" proxyCredentialType="None"
                            realm="" />
                        <message clientCredentialType="UserName" algorithmSuite="Default" />
                    </security>
                </binding>
            </basicHttpBinding>
        </bindings>
        <client>
          <endpoint address="http://192.168.2.140:8081/CotfServerWCF.svc"
              binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_Client"
              contract="ServerWCF.ICotfServerWCF" name="BasicHttpBinding_ICotfServerWCF" >
          </endpoint>
        </client>
    </system.serviceModel>


</configuration>

Я выяснил проблему после того, как обновил свой сервер и клиент с правильными значениями и правильной привязкой.Мой клиент все еще отправляет конфигурацию по умолчанию.Кроме того, файл configuration.svcinfo по-прежнему имеет значение по умолчанию и не обновляется.Есть идеи?

Ответы [ 3 ]

0 голосов
/ 22 декабря 2011

Во-первых, вы уверены, что вы установили HttpRuntime более 4 МБ. Вы можете сделать это, как показано ниже:

<httpRuntime maxRequestLength="1572864"/>

Данный элемент находится под элементом system.web. Среда выполнения .NET Framework по умолчанию не допускает объем данных более 4 МБ.

Ваши читательские квоты на сервере и клиенте немного отличаются. Убедитесь, что у вас есть такие же квоты для чтения клиента, как и для сервера.

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

0 голосов
/ 23 декабря 2011

Клиент должен также получить поведениеConfiguration, которое устанавливает maxItemsInObjectGraph

<system.serviceModel>
  <behaviors>
    <endpointBehaviors>
      <behavior name="ServiceBehavior">
        <dataContractSerializer maxItemsInObjectGraph="2147483647"/>
      </behavior>
    </endpointBehaviors>
  </behaviors>

Тогда .. ссылаться на это новое поведение на клиентской конечной точке ...

<endpoint address="http://youraddresshere"
            binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_IService"
            contract="" name="" behaviorConfiguration="ServiceBehavior" />

Вы также можете попробовать увеличить значение maxBytesPerRead="" в настройках клиента и службы.

0 голосов
/ 22 декабря 2011

Вы меняете настройки квот как на стороне сервера, так и на стороне клиента.

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