Как удостовериться, что WCF ChannelFactory использует Параметры привязки в конфигурации XML (MaxArrayLength проигнорирован),

Зависит от Вашей системы исходного кода и что еще Вы имеете в распоряжении. Если Вы используете Мерзавца, то фиксируете каждый раз, когда Вы заканчиваете шаг. Я использую SVN, и мне нравится фиксировать, когда я заканчиваю целую функцию, таким образом, все к пяти часам. Если бы я использовал CVS, то я сделал бы то же.

6
задан Plastikfan 4 December 2009 в 12:00
поделиться

2 ответа

Я думаю, проблема может заключаться в том, что в конфигурации ваш номер имеет только 6 нулей, а в коде - 7 нулей. Может быть?

1
ответ дан 17 December 2019 в 22:13
поделиться

Может быть, MaxArrayLength - неподходящее свойство.

Попробуйте maxBufferSize и MaxBufferPoolSize:

<bindings>
        <netTcpBinding>
            <binding name="unsecureNetTcpBinding" 
                     maxBufferSize="2147483647"
                     maxBufferPoolSize="2147483647"
                     maxReceivedMessageSize="2147483647">
                <readerQuotas maxArrayLength="1000000" />
                <security mode="None" />
            </binding>
        </netTcpBinding>
    </bindings>

Но реальный вопрос: если у вас большой объем данных , почему вы не используете потоковую передачу WCF ?? Это именно то, для чего он предназначен.

http://www.haveyougotwoods.com/archive/2008/04/14/wcf-message-streaming.aspx

Размеры maxBufferSize и т. Д. Установлены на довольно небольшое значение специально - чтобы избежать атак типа «отказ в обслуживании». Простое повышение их до уровня MaxInt делает ваш сервер уязвимым для этих DOS-атак.

ОБНОВЛЕНИЕ:
Попробуйте сделать следующее: - создать новое консольное приложение - добавить ссылки на System.Runtime.Serialization и System.ServiceModel - добавьте app.config, который точно содержит конфигурацию вашей клиентской стороны - поместите эти строки кода в ваше консольное приложение:

   class Program
   {
        static void Main(string[] args)
        {
            NetTcpBinding binding = new NetTcpBinding("unsecureNetTcpBinding");
            int maxArrayLength = binding.ReaderQuotas.MaxArrayLength;
            long maxReceivedMessageSize = binding.MaxReceivedMessageSize;
        }
    }
  • запустить и отладить - какие значения вы получите ?? Я получаю именно то, что вы ввели: «1000000» для binding.ReaderQuotas.MaxArrayLength , «2147483647» для привязки.MaxReceivedMessageSize.

WCF распознает и использует эти настройки из конфигурации - гарантия 120%. В вашем приложении должно быть что-то подозрительное ...

0
ответ дан 17 December 2019 в 22:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: