Изменить максимальный размер сообщения в DataServiceContext - PullRequest
2 голосов
/ 19 апреля 2011

Я использую DataServiceContext для получения данных от службы wcf, на которой размещен dbml. В целом он работает нормально, но запросы, которые возвращают большие объемы данных (например, двоичные файлы), создают обычную ошибку WCF:

The maximum message size quota for incoming messages (65536) has been exceeded. To increase the quota, use the MaxReceivedMessageSize property on the appropriate binding 

Проблема в том, что я не могу найти, как изменить размер сообщения канала.

Вот код, который я использую для инициализации класса:

var channel = new RPDataModelDataContext(DataServiceBaseAddress);
channel.Credentials = CredentialCache.DefaultCredentials;

где RPDataModelDataContext - прокси-класс клиента, сгенерированный с помощью entityframework

public partial class RPDataModelDataContext : 
    global::System.Data.Services.Client.DataServiceContext
{
    // ...

Может кто-нибудь указать мне правильное направление?

Ответы [ 3 ]

1 голос
/ 21 августа 2012

У меня тоже было множество проблем с этим. Я упустил три детали.

  1. Вы ДОЛЖНЫ указать услугу name точно. Это должно быть полное имя службы. (т.е. Namespace.ClassName )
  2. Вы ДОЛЖНЫ предоставить ТОЧНЫЙ address конечной точки. (См. Код ниже)

    <services>
        <!-- The service name below has to be the EXACT Namespace.ClassName of your WCF Data Service-->
        <service name="YourDomainNameHere.YourClassNameHere">
            <!-- The address below must be the EXACT address of your service-->
            <endpoint address ="http://localhost:19766/YourServiceName.svc" binding="webHttpBinding" bindingConfiguration="higherMessageSize" contract ="System.Data.Services.IRequestHandler">
            </endpoint>
        </service>
    </services>
    
  3. Необходимо указать maxReceivedMessageSize и maxBufferSize

    <bindings>
        <webHttpBinding>
            <!-- The maxReceivedMessageSize and the maxBufferSize must both be specified as shown below-->
            <binding name="higherMessageSize" maxReceivedMessageSize ="2048000" maxBufferSize="2048000"/>
        </webHttpBinding>
    </bindings>
    
0 голосов
/ 20 апреля 2011

После некоторых исследований я не нашел способа настроить клиент службы канала данных.Поэтому я предполагаю, что это невозможно.

Нужно создать нормальный клиент wcf для взаимодействия с ним.

0 голосов
/ 19 апреля 2011

РЕДАКТИРОВАТЬ: Это может быть проблема со стороны службы.Вы должны убедиться, что файл конфигурации service настроен так, как показано на ответе с большинством голосов. В основном вам нужно изменить значение MaxReceivedMessageSize на что-то немного большее, чем ваш наибольший ожидаемый размер результатов запроса,Я должен был установить его до 2 МБ без каких-либо проблем.

...