Квота максимального размера сообщения для входящих сообщений (65536) ...Чтобы увеличить квоту, используйте свойство MaxReceivedMessageSize

У меня сумасшедшая проблема, с которой я пытаюсь справиться. Я знаю, что когда мы получаем огромное количество данных, мы должны увеличить квоту на клиентский .config файл, но что я должен сделать, если мой клиент отправляет огромные данные "на" WCF сервер?

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

Отладчик говорит:

Bad Request, 400;

в файле трассировки:

The maximum message size quota for incoming messages (65536) has была превышена. Чтобы увеличить квоту, используйте свойство MaxReceivedMessageSize свойство MaxReceivedMessageSize соответствующего элемента привязки.

Есть ли способ увеличить квоту входящих данных на стороне сервера? Если да, то как?

Вот мой пример конфига, связанного с частями:

<bindings>
  <basicHttpBinding>
    <binding name="MyBasicHttpBinding"
        closeTimeout="00:01:00" openTimeout="00:01:00" receiveTimeout="00:10:00"
        sendTimeout="00:01:00" allowCookies="false" bypassProxyOnLocal="false"
        hostNameComparisonMode="StrongWildcard" maxBufferSize="2147483647"
        maxBufferPoolSize="2147483647" maxReceivedMessageSize="2147483647"
        messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered"
        useDefaultWebProxy="true">
      <readerQuotas maxDepth="64" maxStringContentLength="2147483647" maxArrayLength="2147483647"
          maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647"  />
      <security mode="None">
        <transport clientCredentialType="None" proxyCredentialType="None"
            realm="" />
        <message clientCredentialType="UserName" algorithmSuite="Default" />
      </security>
    </binding>

  </basicHttpBinding>
</bindings>

 <services>
  <service name="MyWcfService">
    <endpoint address="http://myservice..."
      binding="basicHttpBinding" bindingConfiguration="MyBasicHttpBinding"
      name="MyBasicHttpBinding" contract="IMyContract" />
  </service>
</services> 

и вот мой код на стороне клиента (я создаю его динамически):

        var binding = new BasicHttpBinding();
        binding.MaxBufferPoolSize = 2147483647;
        binding.MaxBufferSize = 2147483647;
        binding.MaxReceivedMessageSize = 2147483647;
        binding.ReaderQuotas.MaxStringContentLength = 2147483647;
        binding.ReaderQuotas.MaxArrayLength = 2147483647;
        binding.ReaderQuotas.MaxDepth = 2147483647;
        binding.ReaderQuotas.MaxBytesPerRead = 2147483647;


        var address = new EndpointAddress("http://mylocalservice.."); 

        ChannelFactory<IMyContract> factory = new ChannelFactory<IMyContract>(binding, address);

        foreach (OperationDescription op in factory.Endpoint.Contract.Operations)
        {
            DataContractSerializerOperationBehavior dataContractBehavior =
                        op.Behaviors.Find<DataContractSerializerOperationBehavior>()
                        as DataContractSerializerOperationBehavior;
            if (dataContractBehavior != null)
            {
                dataContractBehavior.MaxItemsInObjectGraph = 2147483646;
            }
        }
        public IMyContract MyClientObject = factory.CreateChannel();
20
задан tshepang 8 June 2014 в 19:45
поделиться