2010-11-10 8 views
0

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

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

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

+0

Вы данные uploaind в «кусках»? – 2010-11-10 20:53:51

+0

Нет. Я просто вызываю метод службы, который принимает поток памяти и передает ему поток в качестве параметра. – Mark

ответ

0

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

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

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

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

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

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

Смежные вопросы