Отправить большой массив с веб-сервисом - PullRequest
0 голосов
/ 08 марта 2012

Я искал много решений для решения моей проблемы, но не нашел ничего хорошего для меня.

Моя проблема проста: я не могу отправить длинный массив байтов черезвеб-сервис.Я могу отправить массив, который представляет изображение размером 4 Кбайт, но не больше.

это конфигурация клиента

    <configuration>
        <system.serviceModel>
            <bindings>
                <basicHttpBinding>
                    <binding name="BasicHttpBinding_ICespitiAVService"                              closeTimeout="02:00:00"
                openTimeout="02:00:00" receiveTimeout="02:00:00" sendTimeout="02:00:00"         maxReceivedMessageSize="2147483647" maxBufferSize="2147483647" >
                        <security mode="None" />
                    </binding>
                </basicHttpBinding>
            </bindings>
            <client>
                <endpoint address="http://localhost:51366/CespitiAVService.svc"
            binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_ICespitiAVService"
            contract="CespitiAVService.ICespitiAVService" name="BasicHttpBinding_ICespitiAVService"/>
            </client>
        </system.serviceModel>
    </configuration>

это конфигурация сервера

      <system.serviceModel>
        <bindings>
          <basicHttpBinding>
            <binding name="BasicHttpBinding" maxBufferSize="2147483647"
           maxReceivedMessageSize="2147483647">
              <readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647"
           maxArrayLength="2147483647" maxBytesPerRead="2147483647"
           maxNameTableCharCount="2147483647" />
            </binding>
          </basicHttpBinding>
        </bindings>
          <client />
          <behaviors>
            <serviceBehaviors>
              <behavior name="">
                <serviceMetadata httpGetEnabled="true" />
                <serviceDebug includeExceptionDetailInFaults="false" />
                <dataContractSerializer maxItemsInObjectGraph="655360"/>
             </behavior>
            </serviceBehaviors>
          </behaviors>
        <serviceHostingEnvironment multipleSiteBindingsEnabled="true" aspNetCompatibilityEnabled="true"/>
      </system.serviceModel>

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

Кто-то говорит, что изменение режима передачи в конфигурации клиентаразрешит проблему, но я могу использовать только режим с буферизацией, он больше ничего не принимает.

Я использовал fiddler, и он говорит, что программа превышает длину maxarrayle, как вы можете видеть, я изменилэто значение в web.config, но я не могу изменить его в конфигурации клиента, поскольку он говорит, что узел привязки не имеет свойства readerquotas.

Ответы [ 2 ]

0 голосов
/ 14 марта 2012

Я думаю, вам нужна конфигурация поведения конечной точки на клиенте, которая устанавливает свойство maxItemsInObjectGraph в DataContractSerializer.Вы также должны добавить readerQuotas в конфигурацию привязки вашего клиента.Это должно работать:

Клиент:

<behaviors>
  <endpointBehaviors>
    <behavior name="ICespitiAVService_Behavior">
      <dataContractSerializer maxItemsInObjectGraph="2147483647"/>
    </behavior>
  </endpointBehaviors>
</behaviors>
<bindings>
  <basicHttpBinding>
    <binding name="BasicHttpBinding_ICespitiAVService" closeTimeout="02:00:00"
      openTimeout="02:00:00" receiveTimeout="02:00:00" sendTimeout="02:00:00"
      maxBufferSize="2147483647" maxReceivedMessageSize="2147483647">
      <readerQuotas maxDepth="32" maxArrayLength="2147483647" />
      <security mode="None" />
    </binding>
  </basicHttpBinding>
</bindings>
<client>
  <endpoint address="http://localhost:51366/CespitiAVService.svc"
    binding="basicHttpBinding"
    bindingConfiguration="BasicHttpBinding_ICespitiAVService"
    behaviorConfiguration="ICespitiAVService_Behavior"
    contract="CespitiAVService.ICespitiAVService"
    name="BasicHttpBinding_ICespitiAVService"/>
  </endpoint>
</client>

Сервер:

<bindings>
  <binding name="LargeMessages" maxReceivedMessageSize="2147483647">
    <readerQuotas maxArrayLength="2147483647" maxDepth="32" />
  </binding>
</bindings>
<behaviors>
  <serviceBehaviors>
    <behavior name="ICespitiAVService.Behavior">
      <serviceMetadata httpGetEnabled="true" />
      <serviceDebug includeExceptionDetailInFaults="false" />
      <dataContractSerializer maxItemsInObjectGraph="2147483647" />
    </behavior>
  </serviceBehaviors>
</behaviors>
<services>
  <service behaviorConfiguration="ICespitiAVService.Behavior" name="ICespitiAVService">
    <endpoint address="" binding="basicHttpBinding"
      contract="CespitiAVService.ICespitiAVService"
      bindingConfiguration="LargeMessages"/>
    <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
    <host>
      <baseAddresses>
        <add baseAddress="http://localhost:51366/" />
      </baseAddresses>
    </host>
  </service>
</services>
0 голосов
/ 14 марта 2012

Просто попробуйте создать новые файлы конфигурации после Максимальная квота на длину массива (решил мою проблему) и посмотрите, решит ли это вашу проблему или нет, потому что я думаю, что проблема связана сваши файлы конфигурации.

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