• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

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

    Запись на курс до 25 апреля. Получить промодоступ ...

Отправка больших блоков данных Web-service

  • Автор темы *null
  • Дата начала
Статус
Закрыто для дальнейших ответов.
N

*null

Приложение отправляет Web-сервису данные, сервис сохраняет их в базе данных.
Сервис работает на IIS5 по https. Отправку данных осуществляет Windows-Application, например так:

Код:
WebService.GetData(byte[] pbDataToSave, …);

Такой способ нормально работает только при малых размерах pbDataToSave. При размере буфера уже около 80 КБ вызов GetData проваливается с ошибками
The underlying connection was closed: An unexpected error occurred on a send.
либо
The underlying connection was closed: An unexpected error occurred on a receive.
Примерно 50/50 та или другая.

Не могу понять в чем дело. Облазил всю сеть. Советуют перегружать метод GetWebRequest в прокси-классе Web-Service на клиенте:
protected override WebRequest GetWebRequest(Uri uri)
Код:
{
HttpWebRequest webRequest = (HttpWebRequest) base.GetWebRequest(uri);

webRequest.KeepAlive = false;
webRequest.ProtocolVersion=HttpVersion.Version10;
return webRequest;
}
Мне это способ не помог. Кроме того при этом на том же месте стала вылетать ошибка
The underlying connection was closed: A connection that was expected to be kept alive was closed by the server.

Подозреваю, что причина может быть в лимите на размер http-запроса IIS’а. Но как изменить это значение мне не известно, да и не факт что в этом дело.

Пожалуйста, кто сталкивался, помогите!
 
M

mr_ST

Если мне не изменяет мой склероз это защита от атак, то бишь размер request-aограничен. Кроме как передавать данные пакетами иного способа предложить не могу.
 
P

Pasha

А на серверной стороне что пишет?
SOAP сам по себе не очень приспособлен к передаче больших объемов данных.

 
N

*null

Как вообще можно передать Web-сервису большой (несколько мегабайт) кусок бинарных данных?
Если возможно, подкиньте пример.

Сложность еще в том, что мне доступен только Visual Web Developer 2005 EE. Примеры из "Sending and Receiving Large Amounts of Data" ориентированы на VS 2005. Вручную поковырял Web.config не помогло.

К WSE давно присматриваюсь, но тема весьма громоздкая, не уверен что мне это вообще понадобится.
 
P

Pasha

Для: *null
Sending and Receiving Large Amounts of Data - это статья по WSE.
 
K

karlito

Для: *null
поищи в гугле по слову MTOM. Он и в WSE 3.0 поддерживается и в WCF.

Хотя если на сервере размер запроса ограничен и изменить его не имеется возможным, то здесь выкручиваться самому придётся.
По умолчанию, на сколько помню, 4 метра.
 
Статус
Закрыто для дальнейших ответов.
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!