Как увеличить ограничение размера файла в консольном приложении WCF - PullRequest
0 голосов
/ 02 июля 2011

У меня очень простой сервис WCF (консольное приложение для загрузки файлов).Я получаю ошибку (400) неверный запрос.Это работает, когда я загружаю небольшие файлы (4 КБ), но не удается на 700 КБ.

Из показаний, которые я сделал из-за переполнения стека и других, мне придется увеличить MaxReceivedMessageSize.Это было реализовано с использованием пользовательского класса и переопределением метода OnOpening, но он все еще не работал.

Я тестирую консольное приложение с использованием веб-клиента
outputBytes = webClient.UploadData(baseUrl + "/uploads/2." + filenameOnly, File.ReadAllBytes(filename));

ТакжеЯ использую WebServiceHost как в
var uri = new Uri("http://localhost:8000");<br> var svc = new WebServiceHost(typeof (UploadService), uri);

Как мне решить эту проблему?PS: Приложение не имеет конфигурационного файла, поэтому я посмотрю, как это установить в коде.Если нет, и файл конфигурации необходим, то каким должен быть контент.

Примечания: я нашел эту ссылку Ошибка неверного запроса 400 - клиент WCF , где было объяснено, что эти свойства толькодействительно для услуг на основе мыла.Он предложил обновить web.config.Поскольку это консольное приложение, мне интересно, как это можно сделать '

привет.

Ответы [ 2 ]

1 голос
/ 03 июля 2011

Вы можете установить максимальное количество получаемых сообщений программно следующим образом:

 var binding = new wsHttpBinding(); // or whatever binding you are using
 binding.MaxReceivedMessageSize = Int32.MaxValue; 
 var wcfClient = new WCFServiceTestClient(binding, strServiceURL); 

Надеюсь, этого будет достаточно для решения вашей проблемы, но вы также можете рассмотреть возможность разбить файл на биты (пакетировать) перед отправкойна сервер.Отправка очень больших кусков данных может привести к огромным потерям памяти, так как клиент должен сериализовать весь объект заранее, прежде чем отправить его на сервер (а затем то же самое для десериализации его на стороне сервера).

Редактировать: Исходя из вашего дополнительного комментария (ниже), код приложения, в котором размещается служба, может выглядеть примерно так:

        WebServiceHost webServiceHost = new WebServiceHost(typeof(UploadService), uri);
        WebHttpBinding binding = new WebHttpBinding();
        binding.MaxReceivedMessageSize = Int32.MaxValue;
        webServiceHost.AddServiceEndpoint(typeof(IUploadService), binding, "WebServiceHost");
        webServiceHost.Open();
1 голос
/ 02 июля 2011

Был ли у вас просмотр документации ?

Она охватывает как код, так и конфигурацию.

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