|
Создание БД через WCF-сервис
|
|||
---|---|---|---|
#18+
Здравствуйте. Нужно через WCF-сервис организовать работу с базой данных...загрузка, выгрузка файлов из БД через клиентское приложение. Я начала с метода создания БД. Но есть загвоздка. Скрипт для создания БД рабочий, проверялся в sql-менеджере. Метод для создания БД-рабочий, проверялся в windows form application. а в wcf сервисе - БД не создается, по тому же методу с тем же скриптом! ошибка та - мало о чем мне говорит. Самое интересное, что в сервисе у меня 2 метода-создание БД и возврат сообщения. Метод с сообщением - работает! А база не создается. Я в тупике. Помогите пожалуйста, люди добрые :) . Мой маленький проект прилагается. Вот текст runtime-ошибки из Visual Studio: The server was unable to process the request due to an internal error. For more information about the error, either turn on IncludeExceptionDetailInFaults (either from ServiceBehaviorAttribute or from the <serviceDebug> configuration behavior) on the server in order to send the exception information back to the client, or turn on tracing as per the Microsoft .NET Framework SDK documentation and inspect the server trace logs. Я организовала лог-файл, вот ещё инфа оттуда: Exeption type: System.ServiceModel.FaultException, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Message: такой же как из runtime. Stack trace: Server stack trace: System.ServiceModel.Channels.ServiceChannel.ThrowIfFaultUnderstood(Message reply, MessageFault fault, String action, MessageVersion version, FaultConverter faultConverter) System.ServiceModel.Channels.ServiceChannel.HandleReply(ProxyOperationRuntime operation, ProxyRpc& rpc) System.ServiceModel.Channels.ServiceChannel.Call(String action, Boolean oneway, ProxyOperationRuntime operation, Object[] ins, Object[] outs, TimeSpan timeout) System.ServiceModel.Channels.ServiceChannelProxy.InvokeService(IMethodCallMessage methodCall, ProxyOperationRuntime operation) System.ServiceModel.Channels.ServiceChannelProxy.Invoke(IMessage message) Exception rethrown [0]: System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg, IMessage retMsg) System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 type) TestDBClient.ServiceReference1.IFileService.CreateDatabase() TestDBClient.ServiceReference1.FileServiceClient.CreateDatabase() in c:\Users\Administrator\Desktop\MyTest\FileServiceLib\TestDBClient\Service References\ServiceReference1\Reference.cs:line 59 TestDBClient.Program.Main(String[] args) in c:\Users\Administrator\Desktop\MyTest\FileServiceLib\TestDBClient\Program.cs:line 21 System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args) System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args) Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly() System.Threading.ThreadHelper.ThreadStart_Context(Object state) System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx) System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx) System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state) System.Threading.ThreadHelper.ThreadStart() Я в растерянности. Очень надеюсь на вашу помощь! ... |
|||
:
Нравится:
Не нравится:
|
|||
20.02.2014, 11:51 |
|
Создание БД через WCF-сервис
|
|||
---|---|---|---|
#18+
Dessi, авторturn on IncludeExceptionDetailInFaults (either from ServiceBehaviorAttribute or from the <serviceDebug> configuration behavior) Это сделали? Если нет, то вот msdn ... |
|||
:
Нравится:
Не нравится:
|
|||
20.02.2014, 12:15 |
|
Создание БД через WCF-сервис
|
|||
---|---|---|---|
#18+
Lelouch, я так поняла, это свойство нужно чтоб получить детали ошибки? ... |
|||
:
Нравится:
Не нравится:
|
|||
20.02.2014, 12:27 |
|
Создание БД через WCF-сервис
|
|||
---|---|---|---|
#18+
Dessi, да ... |
|||
:
Нравится:
Не нравится:
|
|||
20.02.2014, 12:28 |
|
Создание БД через WCF-сервис
|
|||
---|---|---|---|
#18+
Lelouch, спасибо, попробуем... о результате сообщу. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.02.2014, 12:30 |
|
Создание БД через WCF-сервис
|
|||
---|---|---|---|
#18+
Lelouch, не совсем поняла, что писать вместо контракта ... contract=Microsoft.WCF.Documentation.SampleService ... contract="Microsoft.WCF.Documentation.ISampleService нужно заменить только SampleService, или полностью имя контракта? ... |
|||
:
Нравится:
Не нравится:
|
|||
20.02.2014, 12:52 |
|
Создание БД через WCF-сервис
|
|||
---|---|---|---|
#18+
Dessi, Если у вас уже есть некоторое поведение (behavior) в конфиге сервиса, то добавьте к нему вот такой раздел: Код: xml 1. 2. 3. 4.
Иначе, скопируйте раздел behaviors из примера на MSDN в конфиг вашего сервиса и укажите в этот атрибут: behaviorConfiguration="metadataAndDebug" в разделе <service> который описывает ваш сервис. Надеюсь, понятно) ... |
|||
:
Нравится:
Не нравится:
|
|||
20.02.2014, 13:02 |
|
Создание БД через WCF-сервис
|
|||
---|---|---|---|
#18+
LelouchDessi, Если у вас уже есть некоторое поведение (behavior) в конфиге сервиса, то добавьте к нему вот такой раздел: Код: xml 1. 2. 3. 4.
Иначе, скопируйте раздел behaviors из примера на MSDN в конфиг вашего сервиса и укажите в этот атрибут: behaviorConfiguration="metadataAndDebug" в разделе <service> который описывает ваш сервис. Надеюсь, понятно) я уже по примеру из msdnразобралась, спасибо)) меня изначально смутил действительно тот факт, что у меня уже был behavior. Но я решила этот вопрос. И знаете что, Lelouch, мне сразу выдало адекватный текст runtime-ошибки) Оказывается, когда я дебагала метод создания БД в windows form application, то забыла скопировать отредактированный connection string в мой wcf-сервис, и в сервисе остался старый, неправильный! В общем... включение свойства IncludeExceptionDetailInFaults мне реально помогло понять где я накосячила! Спасибо вам! БД создалась!!! =) ... |
|||
:
Нравится:
Не нравится:
|
|||
20.02.2014, 13:21 |
|
Создание БД через WCF-сервис
|
|||
---|---|---|---|
#18+
Здравствуйте, уважаемые форумчане. У меня снова проблема... Пытаюсь записать файл в таблицу БД в поле типа varbinary(max) через ilestream и sqlfilestream... бьюсь уже над проблемой несколько дней... ничего не получается(( помогите пожалуйста смотрела статью: http://msdn.microsoft.com/ru-ru/library/cc716724(v=vs.110).aspx так даже там данные в БД вставляются INSERT-запросом, и лишь байтик. А как насчет реального файла?? про большой файл то вообще молчу... как модифицировать код из статьи, чтобы конкретный файл, например C:\Users\Administrator\Desktop\Image.png загружался в БД в поле типа varbinary(max)? спасибо. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.02.2014, 16:01 |
|
Создание БД через WCF-сервис
|
|||
---|---|---|---|
#18+
Соответственно, при insert можно передать в запрос в качестве параметра весь контент файла в байтах. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.02.2014, 16:32 |
|
Создание БД через WCF-сервис
|
|||
---|---|---|---|
#18+
Lelouch, я читала эту статью. Это всё не то. Опять же, в примерах - вставка записи с нулевой длинной, и вставка строки. У меня есть приложение. Клацаешь "upload", выбираешь файл и он должен вставиться в поле БД типа varbinary(max). Прочитала уже тонну информации, но так и не поняла как конкретный файл в базу запилить. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.02.2014, 16:37 |
|
Создание БД через WCF-сервис
|
|||
---|---|---|---|
#18+
Lelouch, надо на с# организовать всё это дело. Ну никак не выходит... ... |
|||
:
Нравится:
Не нравится:
|
|||
24.02.2014, 16:39 |
|
Создание БД через WCF-сервис
|
|||
---|---|---|---|
#18+
Вот код с мсдн: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28.
Такое ощущение, что люди только и делают, что записывают по одному байту в файл. Нету никакого реального примера с реальным файлом...( ... |
|||
:
Нравится:
Не нравится:
|
|||
24.02.2014, 16:45 |
|
Создание БД через WCF-сервис
|
|||
---|---|---|---|
#18+
так и не могу до конца понять, что за transactionContext требует конструктор при создании экземпляра SqlFileStream. в документации сказано: The transaction context for the SqlFileStream object. Applications should return the byte array returned by calling the GET_FILESTREAM_TRANSACTION_CONTEXT method. Так что это, этот GET_FILESTREAM_TRANSACTION_CONTEXT, что он представляет собой? Это стрим, в который нужно записать файл, который ты хочешь инсертнуть в БД? что это?? ... |
|||
:
Нравится:
Не нравится:
|
|||
24.02.2014, 16:56 |
|
Создание БД через WCF-сервис
|
|||
---|---|---|---|
#18+
Dessi, для вставки файла в базу не нужно использовать GET_FILESTREAM_TRANSACTION_CONTEXT(). Достаточно просто вставить строку с контентом в базу. Ну показали вам в примере запись 1 байта, как это отменяет то, что вставка нового файла выполняется с помощью Insert? Пример запроса: Код: sql 1. 2. 3. 4.
Вы что, не знаете выполнить insert с помощью C#? оО ... |
|||
:
Нравится:
Не нравится:
|
|||
24.02.2014, 17:01 |
|
Создание БД через WCF-сервис
|
|||
---|---|---|---|
#18+
Dessi, Код: c# 1.
Ну так посмотрите, как FileStream хранится на диске. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.02.2014, 17:02 |
|
Создание БД через WCF-сервис
|
|||
---|---|---|---|
#18+
Dessi, http://msdn.microsoft.com/ru-ru/library/system.data.sqltypes.sqlfilestream.write(v=vs.110).aspx а еще у SqlFileStream есть вот такой метод, позволяет писать сразу многобайтов... ... |
|||
:
Нравится:
Не нравится:
|
|||
24.02.2014, 17:04 |
|
Создание БД через WCF-сервис
|
|||
---|---|---|---|
#18+
LelouchDessi, для вставки файла в базу не нужно использовать GET_FILESTREAM_TRANSACTION_CONTEXT(). Достаточно просто вставить строку с контентом в базу. Ну показали вам в примере запись 1 байта, как это отменяет то, что вставка нового файла выполняется с помощью Insert? Пример запроса: Код: sql 1. 2. 3. 4.
Вы что, не знаете выполнить insert с помощью C#? оО я знаю, как выполнить insert с помощью C#. Я не знаю, как инсертнуть конкретный файл: картинку, видео, аудио... вот снова, в Вашем примере запроса идет просто вставка статически зашитого string-а. А нужно конкретный файл вставить... ... |
|||
:
Нравится:
Не нравится:
|
|||
24.02.2014, 17:19 |
|
Создание БД через WCF-сервис
|
|||
---|---|---|---|
#18+
LelouchDessi, http://msdn.microsoft.com/ru-ru/library/system.data.sqltypes.sqlfilestream.write(v=vs.110).aspx а еще у SqlFileStream есть вот такой метод, позволяет писать сразу многобайтов... этот метод видела. но я к сожалению не до конца понимаю параметр buffer. Если я укажу 512, к примеру, то что, из всего файла только 512 байт прочитает? или тут имеется в виду, что в поток запишется весь файл порциями по buffer байт? ... |
|||
:
Нравится:
Не нравится:
|
|||
24.02.2014, 17:21 |
|
Создание БД через WCF-сервис
|
|||
---|---|---|---|
#18+
Dessi, примерно так: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15.
Название таблицы, ее структура и количество параметров при вставке случайны. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.02.2014, 17:33 |
|
Создание БД через WCF-сервис
|
|||
---|---|---|---|
#18+
Dessi, Он не прочитает а запишет. buffer это контент в байтах, offset - это номер байта в buffer с которого начнется запись, length - сколько байтов, начиная с offset будет записано. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.02.2014, 17:36 |
|
Создание БД через WCF-сервис
|
|||
---|---|---|---|
#18+
LelouchDessi, примерно так: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49.
Название таблицы, ее структура и количество параметров при вставке случайны. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.02.2014, 18:03 |
|
Создание БД через WCF-сервис
|
|||
---|---|---|---|
#18+
Dessi, большие желательно вставлять по-другому) записывая с помощью write небольшими кусками ... |
|||
:
Нравится:
Не нравится:
|
|||
24.02.2014, 18:05 |
|
Создание БД через WCF-сервис
|
|||
---|---|---|---|
#18+
LelouchDessi, большие желательно вставлять по-другому) записывая с помощью write небольшими кусками с помощью FileStream.Write имеете в виду? ... |
|||
:
Нравится:
Не нравится:
|
|||
24.02.2014, 18:17 |
|
Создание БД через WCF-сервис
|
|||
---|---|---|---|
#18+
Dessi, примерно так (код я не проверял, у меня нет MS SQL): Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44.
возможно такой output: "output INSERTED.file_content.PathName(), GET_FILESTREAM_TRANSACTION_CONTEXT()" не поддерживается. тогда надо сделать insert (или insert с output inserted.[поле ID], если ID строки генерится в базе), а потом "select file_content.PathName(), GET_FILESTREAM_TRANSACTION_CONTEXT() from Table where [поле ID] = ID" ... |
|||
:
Нравится:
Не нравится:
|
|||
24.02.2014, 18:20 |
|
Создание БД через WCF-сервис
|
|||
---|---|---|---|
#18+
Забыл транзакцию в команде указать. var command = new SqlCommand("... text ...", connection, transaction); ... |
|||
:
Нравится:
Не нравится:
|
|||
24.02.2014, 18:33 |
|
Создание БД через WCF-сервис
|
|||
---|---|---|---|
#18+
Lelouch, SqlExeption was unhandled: Cannot find either column "Photos" or the user-defined function or aggregate "Photos.PathName", or the name is ambiguous. в колонке Photos - данные varbinary. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.02.2014, 19:26 |
|
Создание БД через WCF-сервис
|
|||
---|---|---|---|
#18+
разобралась ... |
|||
:
Нравится:
Не нравится:
|
|||
24.02.2014, 19:37 |
|
Создание БД через WCF-сервис
|
|||
---|---|---|---|
#18+
Lelouch, а это нормально, что 1,5-гигабайтный файл скинуло за 10 секунд и он отображается так как на картинке? ... |
|||
:
Нравится:
Не нравится:
|
|||
24.02.2014, 19:45 |
|
Создание БД через WCF-сервис
|
|||
---|---|---|---|
#18+
Dessi, нет конечно, пройдитесь отладчиков вот тут: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19.
... |
|||
:
Нравится:
Не нравится:
|
|||
24.02.2014, 19:49 |
|
Создание БД через WCF-сервис
|
|||
---|---|---|---|
#18+
LelouchDessi, нет конечно, пройдитесь отладчиков вот тут: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19.
вы были правы... if (reader.Read()) дает false, и запись не происходит вообще ... |
|||
:
Нравится:
Не нравится:
|
|||
24.02.2014, 20:06 |
|
Создание БД через WCF-сервис
|
|||
---|---|---|---|
#18+
Dessi, в запросе output есть ? ... |
|||
:
Нравится:
Не нравится:
|
|||
24.02.2014, 20:08 |
|
Создание БД через WCF-сервис
|
|||
---|---|---|---|
#18+
Lelouch, да ... |
|||
:
Нравится:
Не нравится:
|
|||
24.02.2014, 20:10 |
|
Создание БД через WCF-сервис
|
|||
---|---|---|---|
#18+
Lelouch, Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44.
... |
|||
:
Нравится:
Не нравится:
|
|||
24.02.2014, 20:12 |
|
Создание БД через WCF-сервис
|
|||
---|---|---|---|
#18+
Dessi, скопируйте сюда код. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.02.2014, 20:13 |
|
Создание БД через WCF-сервис
|
|||
---|---|---|---|
#18+
Не вижу причину, почему reader.read возвращает false. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.02.2014, 20:25 |
|
Создание БД через WCF-сервис
|
|||
---|---|---|---|
#18+
Lelouch, я поменяла инициализацию данныхх с new byte[] на 0х00, и стало true. Но, по-прежнему "записывало" за 10 секунд. Я стала дебагать, итераций 50 может прошло и выдало такое: ... |
|||
:
Нравится:
Не нравится:
|
|||
24.02.2014, 20:27 |
|
Создание БД через WCF-сервис
|
|||
---|---|---|---|
#18+
1) Вставка точно выполняется? 2) Попробуйте заменить на такое: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49.
... |
|||
:
Нравится:
Не нравится:
|
|||
24.02.2014, 20:30 |
|
Создание БД через WCF-сервис
|
|||
---|---|---|---|
#18+
Lelouch, просто output убрать? ... |
|||
:
Нравится:
Не нравится:
|
|||
24.02.2014, 20:31 |
|
Создание БД через WCF-сервис
|
|||
---|---|---|---|
#18+
Dessi, попробуйте убрать .Flush() ... |
|||
:
Нравится:
Не нравится:
|
|||
24.02.2014, 20:32 |
|
Создание БД через WCF-сервис
|
|||
---|---|---|---|
#18+
Dessi, ну раз у вас работает output, то уже не актуально. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.02.2014, 20:33 |
|
Создание БД через WCF-сервис
|
|||
---|---|---|---|
#18+
Кстати, судя по запросу... Это у кого у вас 1.5 гиговые фотографии? оО ... |
|||
:
Нравится:
Не нравится:
|
|||
24.02.2014, 20:39 |
|
Создание БД через WCF-сервис
|
|||
---|---|---|---|
#18+
LelouchКстати, судя по запросу... Это у кого у вас 1.5 гиговые фотографии? оО та это просто название колонки такое)) ... |
|||
:
Нравится:
Не нравится:
|
|||
24.02.2014, 20:41 |
|
Создание БД через WCF-сервис
|
|||
---|---|---|---|
#18+
Lelouch, заработало! Я протестила на видео в 440 мб, всё отлично сохраняет, и тот сохраненный без расширения файл отлично открывается медиаплеером! Теперь буду заниматься чтением из Бд... ))) спасибо Вам огромное! ... |
|||
:
Нравится:
Не нравится:
|
|||
24.02.2014, 21:07 |
|
Создание БД через WCF-сервис
|
|||
---|---|---|---|
#18+
Здравствуйте, форумчане. Работаю над следующим. Есть WCF-сервис (описанный в данной теме), на сервисе происходит запись/скачивание файлов из БД. Суть проблемы: всё чтение/запись происходит через стримы на серверной стороне. Мне же надо на клиентской стороне сделать прогрессБар с ходом выполнения закачки/загрузки. Никак не могу понять, как сделать отображение процесса, который происходит на сервере, на клиентской стороне. Все мозги сломала... Подскажите, пожалуйста. Спасибо! ... |
|||
:
Нравится:
Не нравится:
|
|||
11.03.2014, 15:53 |
|
Создание БД через WCF-сервис
|
|||
---|---|---|---|
#18+
уже не актуально. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.03.2014, 16:47 |
|
Создание БД через WCF-сервис
|
|||
---|---|---|---|
#18+
Здравствуйте, форумчане. Снова обращаюсь к вам за помощью. Суть задания: скачать файл через wcf-сервис с удаленной БД. Суть проблемы: небольшие файлы скачивает без проблем. А вот с файлами побольше - проблема. Выкидывает ексепшн.Тестила закачку одного и того же 1,5-гигабайтного файла, и ексепшн всегда в разные моменты: то через 900 мб закачки, то через 1,1гб, то через 1,4гб, то через 600 мб...вот ексепшн: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45.
вот конфиг сервера: Код: xml 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76.
вот конфиг клиента: Код: xml 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99.
вот сам метод закачки файла: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73.
вот код скачивания файла со стороны клиента: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49.
так же есть лог, но в нем те же в точности ошибки. Не знаю что делать... помогите, пожалуйста! ... |
|||
:
Нравится:
Не нравится:
|
|||
13.03.2014, 14:29 |
|
Создание БД через WCF-сервис
|
|||
---|---|---|---|
#18+
сделала лог ещё и для сервера... вот результат: Код: xml 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59.
The handle is invalid? Но почему?? Какое-то время ж файл пишется... я в недоумении.. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.03.2014, 16:07 |
|
Создание БД через WCF-сервис
|
|||
---|---|---|---|
#18+
Я разобралась... Дело было в том, что конекшн и транзакшн в методе GetFile со временем попадали под сборку мусора, и попадали они до завершения чтения потока. Так как конекшн и транзакшн диспоузились во время чтения из стрима, программа вылетала с ошибкой, что соединение было принудительно закрыто. РЕШЕНИЕ было таковым: чтоб конекшн и транзакшн не попадали под сборку мусора, я классе сервиса создала два приватных поля типа конекшн и транзакшн, а в методе GetFile присвоила в эти поля текущие конекшн и транзакшн. Таким образом сборщик мусора при проверке конекшн и транзакшн будет видеть, что на них кто-то ссылается и не будет делать диспоуз. Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15.
Во-вторых, я изменила ServiceBehavior таким образом, чтобы для каждого сеанса(сессии) создавался свой экземпляр сервиса - один на всю сессию: Код: c# 1. 2. 3. 4. 5.
и... всё заработало! =) ... |
|||
:
Нравится:
Не нравится:
|
|||
13.03.2014, 17:20 |
|
Создание БД через WCF-сервис
|
|||
---|---|---|---|
#18+
такое решение не будет работать, если качать будет более 1 человека ... |
|||
:
Нравится:
Не нравится:
|
|||
13.03.2014, 17:46 |
|
Создание БД через WCF-сервис
|
|||
---|---|---|---|
#18+
Lelouch, а какое решение будет тогда работать? ... |
|||
:
Нравится:
Не нравится:
|
|||
13.03.2014, 18:31 |
|
Создание БД через WCF-сервис
|
|||
---|---|---|---|
#18+
Dessi, хотя бы сделайте поле не статическим, тогда будет работать на сессию. PerCall пробовали ? ... |
|||
:
Нравится:
Не нравится:
|
|||
13.03.2014, 18:57 |
|
Создание БД через WCF-сервис
|
|||
---|---|---|---|
#18+
Изменить малехо сервис... Первым вызовом создавать пустой(аля sparse file) файл полной длины (под весь контент), дальше передавать positin и chunk... это уже и писать в стрим сикнув на позишн... Не? Или так не получится сделать? ... |
|||
:
Нравится:
Не нравится:
|
|||
13.03.2014, 18:58 |
|
Создание БД через WCF-сервис
|
|||
---|---|---|---|
#18+
LelouchDessi, хотя бы сделайте поле не статическим, тогда будет работать на сессию. PerCall пробовали ? хорошо, спасибо, уберу статик. а зачем мне PerCall? Зачем каждый раз создавать-удалять обьект сервиса? На мой взгляд, проще создать один обьект на сессию. Или вы хотите сказать что с PerSession не будет работать если качать будет больше 1 человека? ... |
|||
:
Нравится:
Не нравится:
|
|||
13.03.2014, 19:22 |
|
Создание БД через WCF-сервис
|
|||
---|---|---|---|
#18+
Dessi, Или вы хотите сказать что с PerSession не будет работать если качать будет больше 1 человека? - будет работать, если сделать поля не статическими. Но при этом транзакция и соединение будут жить до закрытия сессии. что не айс. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.03.2014, 19:27 |
|
Создание БД через WCF-сервис
|
|||
---|---|---|---|
#18+
buserИзменить малехо сервис... Первым вызовом создавать пустой(аля sparse file) файл полной длины (под весь контент), дальше передавать positin и chunk... это уже и писать в стрим сикнув на позишн... Не? Или так не получится сделать? Я почему-то не вижу принципиальной разницы между моим методом и Вашим =) Я так же создаю пустой файл полной длины: Код: c# 1.
... Но возвращаю с сервиса полностью стрим. И его уже пишу в пустой файл. Да и как мне с сервиса передавать позишн через return? Да и зачем? ... |
|||
:
Нравится:
Не нравится:
|
|||
13.03.2014, 19:28 |
|
Создание БД через WCF-сервис
|
|||
---|---|---|---|
#18+
Lelouch, у меня есть идеи для решения этой проблемы =) я хочу написать событие, которое бы оповещало сервис что весь стрим уже считан. И диспоузить транзакшн и конекшн при оповещении =) ... |
|||
:
Нравится:
Не нравится:
|
|||
13.03.2014, 19:30 |
|
Создание БД через WCF-сервис
|
|||
---|---|---|---|
#18+
DessibuserИзменить малехо сервис... Первым вызовом создавать пустой(аля sparse file) файл полной длины (под весь контент), дальше передавать positin и chunk... это уже и писать в стрим сикнув на позишн... Не? Или так не получится сделать? Я почему-то не вижу принципиальной разницы между моим методом и Вашим =) Я так же создаю пустой файл полной длины: Код: c# 1.
... Но возвращаю с сервиса полностью стрим. И его уже пишу в пустой файл. Да и как мне с сервиса передавать позишн через return? Да и зачем? да и поможет ли мне изменение такого рода в том, чтоб могли качать несколько людей одновременно? ... |
|||
:
Нравится:
Не нравится:
|
|||
13.03.2014, 19:31 |
|
Создание БД через WCF-сервис
|
|||
---|---|---|---|
#18+
Dessi, подразумевается , что передавать данные надо не стримами, а кусками с массивами байт. запрос файла тогда можно делать при каждом обращении за кусочком к сервису, и, соответственно, не требуется, сохранять соединение. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.03.2014, 19:33 |
|
|
start [/forum/topic.php?all=1&fid=19&tid=1396993]: |
0ms |
get settings: |
12ms |
get forum list: |
16ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
29ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
106ms |
get tp. blocked users: |
1ms |
others: | 13ms |
total: | 199ms |
0 / 0 |