Этот баннер — требование Роскомнадзора для исполнения 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 |
|
||
|
WCF Передача файлов по сети, работа "долгих" методов
|
|||
|---|---|---|---|
|
#18+
у других людей всё получалось использую вот такой конфиг: <?xml version="1.0"?> <!-- For more information on how to configure your ASP.NET application, please visit http://go.microsoft.com/fwlink/?LinkId=169433 --> <configuration> <system.web> <compilation debug="true" targetFramework="4.0" /> <httpRuntime executionTimeout="1200" maxRequestLength="102400" useFullyQualifiedRedirectUrl="false" minFreeThreads="8" minLocalRequestFreeThreads="4" appRequestQueueLimit="100" /> </system.web> <system.diagnostics> <sharedListeners> <add name="WcfListener" type="System.Diagnostics.XmlWriterTraceListener" initializeData="d:\log.svclog" /> </sharedListeners> <sources> <!-- switchValue attribute has no impact on MessageLogging --> <source name="System.ServiceModel.MessageLogging"> <listeners> <add name="WcfListener" /> </listeners> </source> <source name="System.ServiceModel" switchValue="Warning, ActivityTracing" propagateActivity="true" > <listeners> <add name="WcfListener" /> </listeners> </source> </sources> </system.diagnostics> <system.serviceModel> <diagnostics> <messageLogging logEntireMessage="true" logMalformedMessages="true" logMessagesAtServiceLevel="true" logMessagesAtTransportLevel="true" maxMessagesToLog="30000000" maxSizeOfMessageToLog="2000"/> </diagnostics> <behaviors> <serviceBehaviors> <behavior name=""> <serviceMetadata httpGetEnabled="true" /> <serviceDebug includeExceptionDetailInFaults="false"/> <dataContractSerializer maxItemsInObjectGraph="2147483647"/> <bufferedReceive maxPendingMessagesPerChannel="2147483647"/> <serviceThrottling maxConcurrentCalls="1000" maxConcurrentInstances="1000" maxConcurrentSessions ="1000"/> </behavior> </serviceBehaviors> </behaviors> <bindings> <basicHttpBinding> <binding name="" maxReceivedMessageSize="300000000" maxBufferSize="300000000"> <readerQuotas maxArrayLength="30000000" maxStringContentLength="300000000"/> </binding> </basicHttpBinding> </bindings> <serviceHostingEnvironment multipleSiteBindingsEnabled="True" aspNetCompatibilityEnabled="true"/> </system.serviceModel> <connectionStrings> <add name="connString" connectionString="Server=BY047\SQLEXPRESS;Database=TRI_Portal_DataBase;Trusted_Connection=True;" providerName="System.Data.SqlClient" /> </connectionStrings> </configuration> но у меня в этих конфигах выдаёт ошибку в 2х местах, не знаю что делать ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.06.2010, 17:48 |
|
||
|
WCF Передача файлов по сети, работа "долгих" методов
|
|||
|---|---|---|---|
|
#18+
wertyBSDу других людей всё получалось использую вот такой конфиг Так и тут у всех всё получилось. Были проблемы на IIS 5 с файлами больших размеров. Сейчас это уже не актуально. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.06.2010, 17:50 |
|
||
|
WCF Передача файлов по сети, работа "долгих" методов
|
|||
|---|---|---|---|
|
#18+
но у меня не работаеn: <bufferedReceive maxPendingMessagesPerChannel="2147483647"/> пишет что он не является потомком behavior <serviceHostingEnvironment multipleSiteBindingsEnabled="True" aspNetCompatibilityEnabled="true"/> атрибут multipleSiteBindingsEnabled не допускается ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.06.2010, 17:55 |
|
||
|
WCF Передача файлов по сети, работа "долгих" методов
|
|||
|---|---|---|---|
|
#18+
скорее всего там, где Вы это содрали реализовано Поведение (Behavior) службы ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.06.2010, 18:00 |
|
||
|
WCF Передача файлов по сети, работа "долгих" методов
|
|||
|---|---|---|---|
|
#18+
всё равно не работает может всё дело в этом грёбаном silverlight сейчас попробую передать файл пару метров с консоли ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.06.2010, 18:30 |
|
||
|
WCF Передача файлов по сети, работа "долгих" методов
|
|||
|---|---|---|---|
|
#18+
попробовал с консоли послать static void Main(string[] args) { Service1Client basereader = new Service1Client(); FileInfo selectedFile = new FileInfo(@"d:\folder.jpg"); byte[] fileContent = new byte[selectedFile.Length]; using (FileStream fs = selectedFile.OpenRead()) { Console.WriteLine(fs.Length); fs.Read(fileContent, 0, Convert.ToInt32(fs.Length)); fs.Close(); } try { basereader.SavePic(fileContent, 13); } catch(Exception e) { Console.WriteLine(e); TextWriter text = new StreamWriter(@"D:\error.txt"); text.Write(e); } Console.Read(); } ошибка: System.ServiceModel.ProtocolException: The formatter threw an exception while trying to deserialize the message: Error in deserializing body of request message for operation 'SavePic'. The maximum array length quota (16384) has been exceeded while reading XML data. This quota may be increased by changing the MaxArrayLength property on the XmlDictionaryReaderQuotas object used when creating the XML reader. Line 1, position 45451. Server stack trace: at System.ServiceModel.Channels.ServiceChannel.ThrowIfFaultUnderstood(Message reply, MessageFault fault, String action, MessageVersion version, FaultConverter faultConverter) at System.ServiceModel.Channels.ServiceChannel.HandleReply(ProxyOperationRuntime operation, ProxyRpc& rpc) at System.ServiceModel.Channels.ServiceChannel.Call(String action, Boolean oneway, ProxyOperationRuntime operation, Object[] ins, Object[] outs, TimeSpan timeout) at System.ServiceModel.Channels.ServiceChannelProxy.InvokeService(IMethodCallMessage methodCall, ProxyOper ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.06.2010, 18:48 |
|
||
|
WCF Передача файлов по сети, работа "долгих" методов
|
|||
|---|---|---|---|
|
#18+
wertyBSD, ну эта известная настройка. что ты прям горячишься. XmlDictionaryReaderQuotas создаешь этот объект, изменяешь в нем MaxArrayLength и присваиваешь этот объект своей проксе. все уже сделано,просто тебе знаний не хватает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.06.2010, 10:13 |
|
||
|
WCF Передача файлов по сети, работа "долгих" методов
|
|||
|---|---|---|---|
|
#18+
мы избежали передачи через сервис, в сильверлайт передаём данные через хэндлер создали ashx с кодом: using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.IO; using System.Web.Services; namespace TestingTool.Web { /// <summary> /// Summary description for FileUpload /// </summary> [WebService(Namespace = "http://tempuri.org/")] [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] public class FileUpload : IHttpHandler { public void ProcessRequest(HttpContext context) { HttpRequest request = context.Request; HttpResponse response = context.Response; HttpServerUtility server = context.Server; string fileName = context.Request.Params["filename"]; if (!string.IsNullOrEmpty(fileName)) { using (Stream inputStream = request.InputStream) { #region конструирование пути к папке с картинками // ..//DBWcfService//data string folder = System.AppDomain.CurrentDomain.BaseDirectory; folder = folder.Remove(folder.Length - 1, 1); while ((folder.Length > 0) && (folder[folder.Length - 1] != '\\')) folder = folder.Remove(folder.Length - 1, 1); folder += "DBWcfService\\data"; #endregion using (FileStream fs = new FileStream(folder + @"\" + fileName, FileMode.OpenOrCreate)) { byte[] fileContent = new byte[inputStream.Length]; inputStream.Read(fileContent, 0, fileContent.Length); fs.Write(fileContent, 0, fileContent.Length); fs.Flush(); } } response.Clear(); response.End(); } } public bool IsReusable { get { return false; } } } } если бы в silverlight был обычный uploader то не надо было париться вообще с сервисом, а шла бы нормальная закачка ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.06.2010, 10:25 |
|
||
|
|

start [/forum/topic.php?all=1&fid=19&tid=1397651]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
64ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
59ms |
get tp. blocked users: |
1ms |
| others: | 11ms |
| total: | 180ms |

| 0 / 0 |
