2010-09-16 84 views
1

我想在同一臺計算機(在XP上)兩個進程之間工作一個WCF命名管道通信,但我遇到了「大」消息消失的問題。消失的消息包含一個較大的字節數組,我將失敗範圍縮小到陣列大小約爲16k時。比這更小,並且信息通過。發件人說它比較大,但從未收到過。我試圖撞了在發送者和接收者按照這個代碼在服務器的緩衝區大小:WCF命名管道消息大小問題

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(); 

我最終希望轉移陣列中60KB的大小,但這是我第一次認真的WCF體驗,我甚至不知道從哪裏開始尋找。

回答

1

您可以在服務器上啓用WCF tracing以獲取有關故障的更多信息。可能,您仍然需要增加與綁定關聯的讀取器配額(NetNamedPipeBinding.ReaderQuotas)。請特別檢查MaxArrayLength

+0

最大數組長度參數非常可疑,默認值爲16384.但是,請幽默我,並建議我在哪裏改變這一點。出於某種原因,我也在想,在同一個盒子上的命名管道確實通過xml – 2010-09-16 15:34:24

+0

是的... ..修復它。謝謝 – 2010-09-16 15:47:06