Проблемы с размером сообщения именованного канала WCF - PullRequest
2 голосов
/ 16 сентября 2010

Я пытаюсь заставить работать WCF-именованный канал связи между двумя процессами на одном компьютере (в XP), но у меня возникают проблемы с исчезновением "больших" сообщений.Сообщения, которые исчезают, содержат большой массив байтов, и я сузил ошибку до того, когда размер массива составляет около 16 КБ.Меньше, чем это, и сообщение проходит.Больше, чем это, и отправитель говорит, что все прошло нормально, но его так и не получили.Я попытался увеличить размеры буфера на отправителе и получателе в соответствии с этим кодом для сервера:

PipeServer pipeServer = new PipeServer();

ServiceHost serviceHost = new ServiceHost(pipeServer, new Uri[] { new Uri(baseName) });

NetNamedPipeBinding netNamedPipeBinding = new NetNamedPipeBinding();
netNamedPipeBinding.MaxBufferPoolSize = 5000000;
netNamedPipeBinding.MaxBufferSize = 500000;
netNamedPipeBinding.MaxReceivedMessageSize = 500000;

serviceHost.AddServiceEndpoint(typeof(ISSNPipeServer), netNamedPipeBinding, pipeName);

и этот код для клиента:

_callbacks = new PipeClientCallbacks();

NetNamedPipeBinding netNamedPipeBinding = new NetNamedPipeBinding();
netNamedPipeBinding.MaxBufferPoolSize = 5000000;
netNamedPipeBinding.MaxBufferSize = 500000;
netNamedPipeBinding.MaxReceivedMessageSize = 500000;

_pipeFactory = new DuplexChannelFactory<ISSNPipeServer>(_callbacks,
                  netNamedPipeBinding,
                  new EndpointAddress(_targetPipe));

_pipeProxy = _pipeFactory.CreateChannel();

Я в конечном итоге ищудля переноса массивов размером 60 КБ, но это мой первый серьезный опыт WCF, и я даже не представляю, с чего начать.

1 Ответ

1 голос
/ 16 сентября 2010

Вы можете включить трассировку WCF на сервере, чтобы получить больше информации о том, что такое сбой. Вероятно, вам все еще нужно увеличить квоты считывателя, связанные с привязкой (NetNamedPipeBinding.ReaderQuotas). Проверьте MaxArrayLength один, в частности.

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