Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
WCF Передача файлов по сети, работа "долгих" методов
|
|||
|---|---|---|---|
|
#18+
Всем доброе утро! Стало нужно передавать большие (относительно 3~20Mb) по сети используя технологию WCF. Кто как это осуществляет. Интересен пример с реализацией Progress Bar'a при передаче файла. Еще есть другой вопрос. Есть метод, который мы используем удаленно с использованием WCF. Метод возвращает определнное значение. Этот метод может выполнятся как быстро, так и очень долго (в зависимости от кол-ва данных). В случае долгово выполнения метода клиент обрывает соединения не дожидаясь результата по timeout. TimeOut поставлен на максимум. Кто как выходит из такой ситуации ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.08.2008, 10:57 |
|
||
|
WCF Передача файлов по сети, работа "долгих" методов
|
|||
|---|---|---|---|
|
#18+
Неужели нет у нас спецов по WCF ? Cкажите в чем лучше файл пережавать в byte[] или object ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.08.2008, 11:56 |
|
||
|
WCF Передача файлов по сети, работа "долгих" методов
|
|||
|---|---|---|---|
|
#18+
а в object - это как? передаёт? По прогресс бару толко такой вариант пришёл в голову Передавать файл мелкими частями, в первой части передать нужную инфу, а потом вычисляя по переданному размеру отрисовывать прогресс бар с таймаутом думаю этот вариант тоже поможет ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.08.2008, 12:04 |
|
||
|
WCF Передача файлов по сети, работа "долгих" методов
|
|||
|---|---|---|---|
|
#18+
WCF может передавать файлы еще посредством стриминга (собственно, пришлось долго с этим разбираться, работать-то оно работает, но в случае очень больших файлов существуют проблемы, которые решить можно не всегда (например, если нужно сервис держать под IIS)). Посмотрите код здесь: http://kjellsj.blogspot.com/2007/02/wcf-streaming-upload-files-over-http.html (стриминг) А здесь - про индикацию процесса: http://www.gotdotnet.ru/Forums/DotNet3.0/484063.aspx Еще вопрос - таймаутов у WCF много. Какие вы выставляли? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.08.2008, 14:05 |
|
||
|
WCF Передача файлов по сети, работа "долгих" методов
|
|||
|---|---|---|---|
|
#18+
здесь разбирались, есть пример ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.08.2008, 15:03 |
|
||
|
WCF Передача файлов по сети, работа "долгих" методов
|
|||
|---|---|---|---|
|
#18+
webusНеужели нет у нас спецов по WCF ? Webus, Вам надо сменить ник на Ребус. Вы заходите раз в 2 недели, задаёте уравнение с 10 неизвестными и пропадаете. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.08.2008, 16:04 |
|
||
|
WCF Передача файлов по сети, работа "долгих" методов
|
|||
|---|---|---|---|
|
#18+
bured webusНеужели нет у нас спецов по WCF ? Webus, Вам надо сменить ник на Ребус. Вы заходите раз в 2 недели, задаёте уравнение с 10 неизвестными и пропадаете. Меня иногда так и называют. Вебус-Ребус ) Я не пропал. Работал, времени не было выйти на форум. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.08.2008, 17:12 |
|
||
|
WCF Передача файлов по сети, работа "долгих" методов
|
|||
|---|---|---|---|
|
#18+
Столкнулся с такой проблемой. Есть WCF сервис через который можно получать файлы. Хостится он на ISS 7.0 и биндится по netTcpBinding Клиент: WinForms Передаю файлы на клиент через WCF сервис с использованием transferMode="Streamed". Т.е. в виде потока. На клиенте из wcf сервиса я получаю поток System.IO.Stream. Дальше всё просто: читаю данные из потока и сразу же (что бы клиент не замечал задержки) пишу эти данные на диск. Проблема: при первом паралельном получении потоков всё гладко и шустро работает, при следуеших обращениях сервис просто висит, потом вылет по таймауту. Прокси класс естественно закрыл... всё равно экземпляр сервиса висит... и при этом он блокируется... т.е. он перестаёт принимать другие запросы... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.11.2008, 18:47 |
|
||
|
WCF Передача файлов по сети, работа "долгих" методов
|
|||
|---|---|---|---|
|
#18+
[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerSession, ConcurrencyMode = ConcurrencyMode.Single)] У вас наверняка сингтон стоит. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.11.2008, 18:57 |
|
||
|
WCF Передача файлов по сети, работа "долгих" методов
|
|||
|---|---|---|---|
|
#18+
Наврал. Лучше [ServiceBehavior(InstanceContextMode = InstanceContextMode. PerCall , ConcurrencyMode = ConcurrencyMode.Single)] ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.11.2008, 18:58 |
|
||
|
WCF Передача файлов по сети, работа "долгих" методов
|
|||
|---|---|---|---|
|
#18+
сапабо bured. А почему при обращении к методам WCF сервиса, например Stream response = service.GetStream(), проц грузится на 100%(наблюдается и в стимовом, и в буферном режимах)? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.11.2008, 19:24 |
|
||
|
WCF Передача файлов по сети, работа "долгих" методов
|
|||
|---|---|---|---|
|
#18+
Скажу так, видимо в реализации Stream режима в WCF есть баг, когда клиент выполнил операцию, и происходи отключение клиента, не срабатывает Faulted и вообще канал остаются открытым. Реально баг. Для выполнения долгих операций нужно делать OperationTimeout большим, таким как надо. Но делать на стороне клиента!!! и сервера. А делать надо так private ChannelFactory<IAdministratorContract> _factory = new ChannelFactory<IAdministratorContract> _contract = _factory.CreateChannel(endPointAddress); IContextChannel context = _contract as IContextChannel; if (context != null) context.OperationTimeout = TimeSpan.FromMinutes(20); Да и вообще скажу что Stream режим сделан для передачи файлов и потоков. У меня сейчас проект, надо передавать большие выборки данных из базы данных, так я подкрутил WCF, что передаются данные огранниченные только MaxReceivedMessageSize = int.MaxV MaxBufferSize = int.MaxValue; MaxBufferPoolSize = int.MaxValue; т.е. огромные и это без использования Stream режима. Так самое ещё прикольное, что ещё производится сжатие до 30 - 66 раз. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.11.2008, 03:34 |
|
||
|
WCF Передача файлов по сети, работа "долгих" методов
|
|||
|---|---|---|---|
|
#18+
xeonet, а какая при этом нагрузка на проц клиента, сначала я сделал закачку через буферний режим, только при этом были большие нагрузки на проц клиента - короче лажа полная. Потом я сделал через стримовый режим - проблема таймаут. Хотя при первом обращении к методу сервиса проц так же грузится на 100%. Да можна увеличить таймаут, а есть ли иное решение? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2008, 16:32 |
|
||
|
WCF Передача файлов по сети, работа "долгих" методов
|
|||
|---|---|---|---|
|
#18+
IIS не используем, делаем self хостинг. По поводу загрузки процессора на 100, думаю это IIS виноват. Не могу ничего дельного сказать по этому поводу, так как не использую IIS. А какие объёмы файлов? Какие стоят размеры BufferSize и др? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.11.2008, 03:12 |
|
||
|
WCF Передача файлов по сети, работа "долгих" методов
|
|||
|---|---|---|---|
|
#18+
xeonet, MaxBufferPoolSize = 104857000, MaxReceivedMassageSize = 200000000 файлы размером 100Мб - 300Мб. При буферном режиме таймаут не возникает, только при стримовом! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.11.2008, 16:13 |
|
||
|
WCF Передача файлов по сети, работа "долгих" методов
|
|||
|---|---|---|---|
|
#18+
Задам вопро гуру по AsyncPattern. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. Вот такие интерфейсы. Сервер запускается так: ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.11.2008, 11:46 |
|
||
|
WCF Передача файлов по сети, работа "долгих" методов
|
|||
|---|---|---|---|
|
#18+
Код: plaintext т.е. от интерфейса HDService Клиента реализовал так: Код: plaintext т.е. от IAHDInterface по сути все верно но вылетает ошибка при вызове BeginSelectObject. Не пойму причем тут Action ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.11.2008, 11:49 |
|
||
|
WCF Передача файлов по сети, работа "долгих" методов
|
|||
|---|---|---|---|
|
#18+
please help ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.11.2008, 12:39 |
|
||
|
WCF Передача файлов по сети, работа "долгих" методов
|
|||
|---|---|---|---|
|
#18+
Простите, может, немного не по сабжу, но - если юзать обычный asmx веб-сервис ? А бинарные данные переправлять как Base64? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.11.2008, 13:24 |
|
||
|
WCF Передача файлов по сети, работа "долгих" методов
|
|||
|---|---|---|---|
|
#18+
МСУПростите, может, немного не по сабжу, но - если юзать обычный asmx веб-сервис ? А бинарные данные переправлять как Base64? тут уже загвоздка не в бинарных данных а в самом AsyncPattern для WCF ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.11.2008, 13:26 |
|
||
|
WCF Передача файлов по сети, работа "долгих" методов
|
|||
|---|---|---|---|
|
#18+
Проблему таймаута решил(надо было перед закритием канала делать клин для стрима), а вот с нагрузкой проца при первом обращении нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.11.2008, 20:06 |
|
||
|
WCF Передача файлов по сети, работа "долгих" методов
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. count = StreamChankSize? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.11.2008, 17:42 |
|
||
|
WCF Передача файлов по сети, работа "долгих" методов
|
|||
|---|---|---|---|
|
#18+
Хост на IIS 7.0 maxBufferPoolSize="104857000" maxReceivedMessageSize="200000000" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.11.2008, 17:49 |
|
||
|
WCF Передача файлов по сети, работа "долгих" методов
|
|||
|---|---|---|---|
|
#18+
webusЗадам вопро гуру по AsyncPattern. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. Вот такие интерфейсы. Сервер запускается так: Нельзя повторять названия SelectObject и BeginSelectObject надо сделать например SelectObject1 и BeginSelectObject ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.07.2009, 18:06 |
|
||
|
WCF Передача файлов по сети, работа "долгих" методов
|
|||
|---|---|---|---|
|
#18+
проблема не в передаче, а в конфига передача это очень просто и решено ещё давно: допустим в базе есть вопрос к которому надо боавить картинку и сохранить под айдишником вопроса public bool SavePicture(byte[] pic, int IdQ) { bool Return = false; try { FileUploader f = new FileUploader(); Return = f.SaveFile(IdQ.ToString(), pic); if (Return) { DataTestsDataContext db = new DataTestsDataContext(); var Quest = from p in db.Questions where p.IdQ == IdQ select p; foreach (var Id in Quest) { Id.Pic = "data" + IdQ.ToString(); Return = true; } return Return; } } catch (Exception ex) { Trace.TraceError("SavePicture error: " + ex.Message); } return Return; } вспомогательный класс для закачки public class FileUploader { public bool SaveFile(string fileName, byte[] fileContent) { bool ret = false; try { String path = AppDomain.CurrentDomain.BaseDirectory + @"data\" + fileName; if (File.Exists(path)) { File.Delete(path); } File.WriteAllBytes(path, fileContent); ret = true; } catch (Exception ex) { Trace.TraceError("FileUploader.SaveFile error: " + ex.Message); } return ret; } } почти всё работает, единственная проблема что файл передаётся размером не более 60 кб надо в web.config править, но тут у меня ни чего не получается ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.06.2010, 17:44 |
|
||
|
|

start [/forum/topic.php?fid=19&msg=35650306&tid=1397651]: |
0ms |
get settings: |
13ms |
get forum list: |
16ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
66ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
68ms |
get tp. blocked users: |
2ms |
| others: | 279ms |
| total: | 468ms |

| 0 / 0 |
