Модераторы: gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Ограничение на передоваемый рамер данных между Sil 
:(
    Опции темы
EagleOne
Дата 1.5.2012, 21:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 43
Регистрация: 20.11.2009

Репутация: нет
Всего: 1



Приветствую,
 
мне понабилось отправлять на сервер файлы по нескольку штук и размером до 50 Мб.
 
Для этого я написал Silverlight контрол, который делит прикрепленные файлы на блоки и отправляет их по очереди и
 
WCF сервис, который собирает файл из кусков обратно и сохраняет в базу.
 
Куски файлов передаются в виде объектов вот такого класса:

Код

[DataContract]
    public class PhotoPartDataObject
    {
        [DataMember]
        public Guid PhotoId { get; set; }

        [DataMember]
        public byte[] PhotoPart { get; set; }

        [DataMember]
        public int PartNumber { get; set; }

        [DataMember]
        public ulong PhotoAlbumId { get; set; }

        [DataMember]
        public string PhotoDisplayName { get; set; }

        [DataMember]
        public string PhotoFileName { get; set; }

        [DataMember]
        public string PhotoExtension { get; set; }

        [DataMember]
        public string PhotoMimeType { get; set; }

        [DataMember(IsRequired = false)]
        public ulong PhotoFileSize { get; set; }

        [DataMember]
        public int CountParts { get; set; }
    }


Проблема возникла следующая:
 
Если куски отправляемых файлов (поле PhotoPart) больше 10 кбайт, то отправки не происходить, происходит вот такой эксепшн:
 
"Unhandled Error in Silverlight Application Неправильный результат из-за исключения, возникшего во время операции.  См. описание исключения в InnerException.   в System.ComponentModel.AsyncCompletedEventArgs.RaiseExceptionIfNecessary()\n   в PhotoLoader.PhotoLoaderServiceReference.StorePhotoPartCompletedEventArgs.get_Result()\n   в PhotoLoader.MainPage.mPhotoLoadingServiceClient_StorePhotoPartCompleted(Object sender, StorePhotoPartCompletedEventArgs e)\n   в PhotoLoader.PhotoLoaderServiceReference.PhotoLoadingServiceClient.OnStorePhotoPartCompleted(Object state)"
 
Если передавать файлы не через WCF, а напрямую Web-приложению через http post запрос, то тогда в легкую передаются файлы по 10 Мб.
 
У меня сложилось впечатление, что Silverlight шлет запросы WCF-у внутри GET запросов, поэтому и такое ограничение...
 
вопрос, как это исправить, т.е. как сделать так, что можно было отправлять куски хотябы по 1 Мб???
 
конфигурация сервиса у меня сейчас такая:

Код

<system.webServer>
    <modules runAllManagedModulesForAllRequests="true"/>
  </system.webServer>
  <system.serviceModel>
    <behaviors>
      <serviceBehaviors>
        <behavior name="">
          <serviceMetadata httpGetEnabled="true" />
          <serviceDebug includeExceptionDetailInFaults="false" />
        </behavior>
      </serviceBehaviors>
    </behaviors>
    <bindings>
      <customBinding>
        <binding name="FileArchive.PhotoAlbums.Services.PhotoLoadingService.customBinding0">
          <binaryMessageEncoding />
          <httpTransport />
        </binding>
      </customBinding>
    </bindings>
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true"
      multipleSiteBindingsEnabled="true" />
    <services>
      <service name="FileArchive.PhotoAlbums.Services.PhotoLoadingService">
        <endpoint address="" binding="customBinding" bindingConfiguration="FileArchive.PhotoAlbums.Services.PhotoLoadingService.customBinding0"
          contract="FileArchive.PhotoAlbums.Services.PhotoLoadingService" />
        <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
      </service>
    </services>
  </system.serviceModel>


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

Код

конфигурация Silverlight клиента:
 <configuration>
    <system.serviceModel>
        <bindings>
            <customBinding>
                <binding name="CustomBinding_PhotoLoadingService">
                    <binaryMessageEncoding />
                    <httpTransport maxReceivedMessageSize="2147483647" maxBufferSize="2147483647" />
                </binding>
            </customBinding>
        </bindings>
        <client>
            <endpoint address="http:// тут_весь_путь... /PhotoLoadingService.svc"
                binding="customBinding" bindingConfiguration="CustomBinding_PhotoLoadingService"
                contract="PhotoLoaderServiceReference.PhotoLoadingService"
                name="CustomBinding_PhotoLoadingService" />
        </client>
    </system.serviceModel>
</configuration>


P.S.: когда искал решение наткнулся на статьи про file streaming через WCF, но мне это не подходит, мне интересней разобраться, почему
 
блоки больше 10 кбайт не передаются... 

PM MAIL   Вверх
EagleOne
Дата 2.5.2012, 13:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 43
Регистрация: 20.11.2009

Репутация: нет
Всего: 1



InnerException у меня вытащить получилось прямо из рабочего приложения smile,

и то что я там увидел многое объясняет:

Unhandled Error in Silverlight Application Форматтер сгенерировал исключение при попытке десериализовать сообщение: Ошибка десериализации параметра :photoPartDataObject. Сообщение InnerException было 'Ошибка десериализации объекта типа Business.DataObjects.PhotoPartDataObject. Превышена квота максимальной длины массива (16384) при чтении данных XML. Эту квоту можно увеличить, изменив свойство MaxArrayLength объекта XmlDictionaryReaderQuotas, используемого при создании устройства чтения XML.'.

Теперь мне остается разобраться,  как изменить MaxArrayLength - т.е. как я могу получить доступ к объекту класса XmlDictionaryReaderQuotas выполняющего десериализацию / сериализацию данных при отправке / получении их??? 

Это сообщение отредактировал(а) EagleOne - 2.5.2012, 14:00
PM MAIL   Вверх
EagleOne
Дата 2.5.2012, 21:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 43
Регистрация: 20.11.2009

Репутация: нет
Всего: 1



всё разобрался с проблемой, всё работает smile
PM MAIL   Вверх
starick3000
Дата 14.1.2015, 08:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 16.7.2010

Репутация: нет
Всего: нет



Цитата(EagleOne @ 2.5.2012,  13:59)
Превышена квота максимальной длины массива (16384) при чтении данных XML

а как решилась проблемма с 
PM MAIL   Вверх
Ilya81
Дата 14.1.2015, 13:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 105
Регистрация: 18.4.2014
Где: ЛО, Всеволожский р-н

Репутация: нет
Всего: 4



Цитата(starick3000 @  14.1.2015,  08:13 Найти цитируемый пост)
Цитата(EagleOne @ 2.5.2012,  13:59)
Превышена квота максимальной длины массива (16384) при чтении данных XML

а как решилась проблемма с  


Для нужного binding задаются свойства - readerQuotas и прочее.
PM MAIL ICQ Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
cully
mr.DUDA
Exception

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, cully, mr.DUDA, Exception.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Распределённые приложения и сеть | Следующая тема »


 




[ Время генерации скрипта: 0.1178 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.