Загрузка файлов Конечная точка веб-API WCF - PullRequest
2 голосов
/ 30 мая 2011

Есть ли способ загрузить файл в конечную точку веб-API WCF?Если да, как я могу получить доступ к Network Stream для чтения данных?

Любая помощь очень ценится.

Спасибо.

Ответы [ 2 ]

4 голосов
/ 10 июня 2011

Предполагается, что вы говорите на стороне клиента:

Один из способов сделать это - создать класс FileContent, производный от HttpContent.В переопределениях вы получите NetworkStream, когда HTTPClient будет готов к приему потока.

Если вы спрашиваете о серверной стороне, вы можете просто получить HTTPRequestMessage и получить доступ к свойству httpRequestMessage.Content.ContentReadStream.


Обновление

По умолчанию транспорт WCF ограничен отправкой сообщений на 65K.Если вы хотите отправлять сообщения большего размера, вам нужно включить «Режим потоковой передачи» и вам нужно увеличить размер MaxReceivedMessageSize, который служит лишь средством защиты от того, чтобы кто-то не убивал ваш сервер, загружая массивный файл.

Таким образом, вы можете сделать это с помощью конфигурации привязки или в коде.Вот один из способов сделать это в коде:

var endpoint = ((HttpEndpoint)host.Description.Endpoints[0]);  //Assuming one endpoint
endpoint.TransferMode = TransferMode.Streamed;
endpoint.MaxReceivedMessageSize = 1024 * 1024 * 10;  // Allow files up to 10MB
2 голосов
/ 23 декабря 2011

Этот ответ предназначен только для добавления некоторых деталей в предварительный просмотр веб-API 6.

TransferMode и MaxRecievedMessageSize новые экспонируются через WebApiConfigurationClass.

var builder = new WebApiConfiguration();
builder.TransferMode = TransferMode.Streamed;
builder.MaxReceivedMessageSize = 1024 * 1024 * 10;

var serviceRoute = new WebApiRoute(route, new WebAPIServiceHostFactory() { Configuration = builder }, typeof(MyService));

Мне это нравится!

...