Проблема в вашем контракте на данные - public System.IO.Stream FileByteStream;
. Удалите этого участника из контракта на данные и используйте stream
в контракте на операции - например:
[OperationContract(OneWay=true)]
void UploadFile(RemoteFileInfo request, System.IO.Stream fileData);
Цитируется из Большие данные и потоковая передача (MSDN):
Вы не должны использовать
Производные типы System.IO.Stream внутри
данных контрактов. Потоковые данные должны
общаться с использованием потоковой передачи
модель, объясненная в следующем
Раздел «Потоковые данные».
В разделе «Потоковые данные» по той же ссылке это подробно объясняется.
Проблема в вашем договоре на передачу данных - public System.IO.Stream FileByteStream;
. Удалите этого участника из контракта на данные и используйте stream
в контракте на операции - например:
[OperationContract(OneWay=true)]
void UploadFile(RemoteFileInfo request, System.IO.Stream fileData);
Цитируется из Большие данные и потоковая передача (MSDN):
Вы не должны использовать
Производные типы System.IO.Stream внутри
данных контрактов. Потоковые данные должны
общаться с использованием потоковой передачи
модель, объясненная в следующем
Раздел «Потоковые данные».
В разделе «Потоковые данные» по той же ссылке это подробно объясняется.
EDIT:
Извинения - я пропустил ограничения. У вас есть два способа решения проблемы - используйте MessageContract
или используйте несколько операций для одной транзакции. Пример использования нескольких операций будет
[OperationContract]
Token UploadFile(System.IO.Stream fileData);
[OperationContract]
void ProvideFileInfo(Token token, RemoteFileInfo request);
Сначала загрузите данные на сервер, и сервер выдаст токен (например, guid), используйте токен для обновления другой информации.
Более предпочтительным способом будет использование MessageContract
, которое вы уже пробовали. Несколько предложений по устранению неполадок:
- Если ваш хостинг это в IIS, проверьте maxRequestLength в web.config. Попробуйте загрузить небольшие файлы.
- Вместо того, чтобы использовать поток ОпубликованоFile напрямую, сохраните его на диск и используйте поток поверх него. Причиной того, что поток HTTP-запросов может быть очищен во время загрузки.
- Используйте инструмент, такой как fiddler, и просмотрите сообщение, передающееся по сервису через проволоку, которое может дать подсказку.