Загрузка файла WCF из клиента Silverlight - PullRequest
0 голосов
/ 10 ноября 2010

Я пытаюсь загрузить файлы в службу WCF, используя потоковую передачу для загрузки больших файлов.Все это работает нормально, используя обычный клиент (например, страницу ASP.net).Однако в Silverlight я получаю следующую ошибку: Тайм-ауты не поддерживаются в этом потоке

Я загружаю через поток памяти и предполагаю, что проблема в основном потому, что вместо вызова синхронного метода в Silverlight я вынужден вызватьасинхронный метод.Так что это то, что не нравится нормальный поток памяти.Я попытался найти какой-то другой поток для использования, но похоже, что они не поддерживаются в silverlight (bufferedstream, networkstream) или нарушают метод (общий поток, который по какой-то причине ДОЛЖЕН быть единственным параметром метода, который будет использоваться).Я что-то здесь упускаю?Изначально я использовал байтовый массив, но там слишком много ограничений по размеру для того, что мне нужно разрешить для загрузки.

Я могу вставить свой код сюда, но, поскольку все работает с моим тестовым клиентом ASP.net, яЯ предполагаю, что мои привязки и код в порядке.

1 Ответ

0 голосов
/ 11 ноября 2010

Здесь есть три отдельных вопроса:

1) Можете ли вы использовать тип Stream в своем контракте?

2) Можете ли вы получить истинное потоковое поведение на клиенте?(Например, загрузить 2 ГБ файла без выделения 2 ГБ памяти в любом месте стека - включая базовый стек HTTP)

3) Можете ли вы получить истинное потоковое поведение на сервере?

Насколько я помнюответы на # 1 и # 2 - «нет» в Silverlight (хотя, возможно, они изменились в SL4.0).Так что лучшее, что вы можете достичь, это # ​​3.Например, вы можете попробовать немного поработать с контрактом на основе byte [] на стороне Silverlight, который приведет к той же проекции XML, что и контракт на основе Stream на стороне сервера.Или используйте byte [] на стороне клиента и читайте из класса Message непосредственно на стороне сервера.

Но мои воспоминания о # 1 / # 2 могут быть неправильными ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...