Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

Выгрузка файлов. File.ashx




Для выгрузки файлов предназначен специальный обработчик запросов File.ashx, расположеный в директории вместе с остальными web-сервисами и возвращающий содержимое в ответ на обычный HTTP-GET запрос. В качестве идентификатора можно передать один из двух взаимоисключающих атрибутов:

§ Модельный ключ, возвращаемый всеми командами добавления файлов, в аргументе id (например, File.ashx?id=301245)

§ Универсальный идентификатор объекта в аргументе guid (соответствует значению атрибута UID, например, File.ashx?guid=275399C0-94A7-4894-B943-4D9C3F7DFF59

Перед формированием запроса необходимо открыть сессию обычными методами и включить в запрос на сервер cookies полученные при авторизации.

Пример:

void DownloadFile(string url, HttpCookieContainer cookies,

long fileID, string targetFileName)

{

string fileUrl = url + "?id=" + fileID;

var client = new CookieWebClient(cookies);

client.DownloadFile(fileUrl, targetFileName);

}

 

 

public class CookieWebClient: WebClient {

private CookieContainer _cookies;

public CookieWebClient(CookieContainer cookies) { _cookies = cookies; }

 

protected override WebRequest GetWebRequest(Uri address) {

HttpWebRequest req = (HttpWebRequest) base.GetWebRequest(address);

req.CookieContainer = _cookies;

return req;

}

}

Загрузка файлов большого объема

Для загрузки больших файлов предназначены новые методы в сервисе Utils.asmx: StartUpload, Upload, CompleteNewFile и CompleteNewVersion. С их помощью можно добавить новый файл к документу и новую версию к существующему файлу.

Загрузка файлов выполняется частями: сначала получается идентификатор загрузки, затем загружаются куски файла и в конце выполняется завершающий метод отправляющий полный файл на сервер контента.

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

Для проверки корректности передачи данных рекомендуется в завершающие методы передавать хеш-код исходного файла вычисленный на стороне клиента по одному из алгоритмов: SHA1 или MD5. При ошибке проверки передачу можно повторить полностью.

Пример загрузки новой версии:

long UploadVersion(Utils server, string sourceFileName,

Stream stream, HashAlgorithm hashAlgorithm,

byte[] hash, long length)

{

byte[] m1 = new byte[1024 * 1024];

 

long off = 0;

int count = stream.Read(m1, 0, m1.Length);

 

string uploadID = server.StartUpload(Extract(m1, count));

off += count;

 

while (true)

{

count = stream.Read(m1, 0, m1.Length);

if (count == 0)

break;

 

server.Upload(uploadID, Extract(m1, count), off);

off += count;

}

 

return server.CompleteNewVersion(uploadID, sourceFileID,

length, hashAlgorithm, hash);

}

 

Пример вычисления хеш-кода файла:

using (var stream = Open(fileName))

{

using (var ha = new SHA1Managed())

{

return ha.ComputeHash(stream);

}

}


Патч данных

Патч данных применяется в случае, когда после обновления версии сервера контента, изменился формат возвращаемых данных или их состав. Патч представляет собой XML файл с именем DataPatch.xml, который должен лежать в той же директории, что и web.config.

Содержимое файла организовано в виде набора действий для диапазона версий, установленных клиентскими приложениями. Диапазоны версий проверяются в порядке расположения в файле: используется первый подходящий. Команды тоже выполняются в последовательности расположения в файле. Команды привязаны к сущности репозитория, к которой они относятся: web-вервисы после получения набора данных (DataSet) в зависимости от метода определяют, какие таблицы к какой сущности относятся, и выполняют для каждой таблицы свой набор команд.

Данные в XML файле должны удовлетворять схеме http://schemas.landocs.ru/ContentServer/Last/DataPatch.xsd. Корневой элемент – PATCH из пространства имен http://schemas.landocs.ru/ContentServer/WebServices/DataPatch/2016-12.

 

 

 

Описание элементов и их атрибутов

Элемент/Тип/атрибут Назначение
PATCH Корневой элемент файла с данными
VERSION Элемент типа VersionType содержащий патч для диапазона версий.
VersionType Тип данных для патча определенной версии
min Минимальный номер версии установленной приложением, к которой применяется патч (вложенные команды). Если не задан, то считается 0.0
max Минимальный номер версии установленной приложением, к которой применяется патч (вложенные команды). Если не задано, то считается 999999.999999
ENTITY Элемент типа EntityType содержащий набор команд для трансформации данный определенной сущности. Один элемент VERSION может содержать несколько наборов команд для одной сущности.
EntityType Контейнер команд применяемых к определенной сущности
name Имя репозиторной сущности, для которой применяются команды.
propagate Применять ли команды для сущностей наследуемых от указанной в атрибуте name.
ChangeType Команда для изменения типа столбца в таблице
name Имя столбца, в котором нужно изменить тип. Если столбец отсутсвует в полученных данных, то команда пропускается.
type Имя типа, к которому нужно привести значения. Список допустимых типов приведен ниже. Если столбей уже обладает нужнным типом, то команда пропускается.
Copy Команда для копирования значения столбца в новый столбец
from Имя столбца из которого нужно взять исходные данные. Если столбец отсутсвует, то команда пропускается.
to Имя столбца, в который нужно скопировать данные. Если столбец уже присутствует в данных, то команда пропускается.
type Имя типа, к которому нужно привести значения. Список допустимых типов приведен ниже.

Поддерживаемые имена типов (регистр не важен):

§ byte[]

§ decimal

§ long

§ GUID

§ string

§ int

§ int64

§ DateTime

§ double

 


Общедоступные ссылки

Последние описания сервисов можно загрузить с сайта http://schemas.landocs.ru/ContentServer/Last.

Название Ссылка
Базовые методы LanDocs http://schemas.landocs.ru/ContentServer/Last/BMService.wsdl
Сервис поручений http://schemas.landocs.ru/ContentServer/Last/Instructions.wsdl
Конфигурация http://schemas.landocs.ru/ContentServer/Last/ExternalConfig.wsdl
Вспомогательные методы http://schemas.landocs.ru/ContentServer/Last/Utils.wsdl
Схема патча формата данных http://schemas.landocs.ru/ContentServer/Last/DataPatch.xsd

Пример строки вызова рабочей копии web-сервисов http://<адрес сервера>/<путь к web-сервисам>/BMService.asmx?wsdl

 


Приложение 1. Типовая нагрузка для систем автоматизации ДОУ

Показатели типовой нагрузки для систем автоматизации административного документооборота (ДОУ) получены в результате анализа статистических данных из различных источников. Состав сценариев приведен в таблице. Сценарии типовой нагрузки были использованы при проведении нагрузочных испытаний Системы и определении на их основе требований к оборудованию.

При отличии сценариев использования Системы от типовых, требования к аппаратному обеспечению могут отличаться от рекомендуемых. Разработчики приложений, использующих web-сервисы Системы, должны самостоятельно оценивать нагрузку, создаваемую этими приложениями на Систему, и предоставлять требования к аппаратному обеспечению.

Таблица 1– Сценарии типовой нагрузки систем автоматизации административного документооборота

Сценарий Число за 8 часов для 4000 пользователей Число в час на одного пользователя
1. Создание документа, создание связей данного документа с двумя другими, добавление в Лист согласования пятерых согласующих лиц   0,104
2. Открытие документа, открытие и сохранение измененного файла (1 Мб)   4,167
3. Открытие документа, изменение его номера, присоединение файла со сканера. Сохранение внесенных изменений   0,208
4. Создание документа, автоматический поиск документов с совпадающими значениями полей (например, «Входящий номер» и «Адресат»), создание связей с двумя документами, добавление файла документа, получение регистрационного номера   0,104
5. Открытие документа, получение связанной информации (основные реквизиты, файлы документа, связи с другими документами, поручения по документу)   1,042
6. Открытие документа, вызов команды создания поручения по документу, задание троих получателей, отправка поручения или сохранение проекта поручения   0,104
7. Открытие поручения, вызов команды перенаправления поручения, задание в числе получателей троих подчиненных, отправка поручения   0,938
8. Взятие поручения в работу, создание по нему проекта отчета   0,938
     
9. Фильтрация входящих документов или поручений (до 100 записей). § Возможно обновление списка поручений в папке «Поручения» ® «Входящие». Количество входящих поручений и отчетов суммарно 100. К папке можно применить фильтр по дате – «за последние 7 дней». § Возможно отображение документов в журнале «Входящие» с учетом ограничения по дате (есть несколько преднастроенных фильтров по дате, которые можно чередовать) или фильтра «Прочтенные» / «Непрочтенные»   1,000
1,000
10. Открытие консолидированного журнала, содержащего входящие документы одного подразделения. Размер журнала – 200 записей   0,245
11. Применение к спискам документов сложных фильтров – по диапазону дат, по подразделению. В результате отбора в списке должно остаться не более 1000 записей   0,153
12. Формирование статистического отчета, например, о количестве поручений, выполненных сотрудниками каждого подразделения за последние 12 месяцев   1,531
13. Поиск по справочнику «Сотрудники». Размер справочника – 100 000 записей. Поисковый запрос должен быть составлен таким образом, чтобы результатом поиска стало порядка 10 записей   14,369
14. Поиск по справочнику «Физические лица», «Юридические лица». Размер каждого справочника – 200 000 записей. Поисковые запросы должны быть построены таким образом, чтобы результатом поиска стало порядка 10 записей   7,494
     

 

Поделиться:





Воспользуйтесь поиском по сайту:



©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...