2011-06-24 72 views
2

DynamicProxyFactory錯誤我用了dynamicproxyfactory爲了通過WSDL的任意字符串路徑來調用Web服務。 Unfortunalty,當A web服務答案大量的數據,將引發一個例外:與接收到的數據大小

System.ServiceModel.CommunicationException: 最大尺寸允許 配額用於傳入消息(65536)已被超過 。爲了增加配額,使用 財產MaxReceivedMessageSize相應的鏈接的 元素。 ---> System.ServiceModel.QuotaExceededException: 最大尺寸允許 配額用於傳入消息(65536)已被超過 。爲了增加配額,使用 財產MaxReceivedMessageSize相應的鏈接的 元素。 ---結束 跟蹤內部異常堆棧 ---

服務器堆棧跟蹤:在 System.ServiceModel.Channels.HttpInput.ThrowMaxReceivedMessageSizeExceeded() 到 System.ServiceModel.Channels.HttpInput .GetMessageBuffer()來 System.ServiceModel.Channels.HttpInput.ReadBufferedMessage(流 的inputStream)至 System.ServiceModel.Channels.HttpInput.ParseIncomingMessage(例外& requestException)至 System.ServiceModel.Channels.HttpChannelFactory.HttpRequestChannel。 HttpChannelRequest.WaitForReply(T imeSpan 超時)到 System.ServiceModel.Channels.RequestChannel.Request(消息 消息時間跨度超時)到 System.ServiceModel.Dispatcher.RequestChannelBinder.Request(消息 消息時間跨度超時)到 System.ServiceModel.Channels。 ServiceChannel.Call在 System.ServiceModel.Channels.ServiceChannelProxy.InvokeService(字符串 操作,布爾單向, ProxyOperationRuntime操作, 對象[]項,對象[]奏, 時間跨度超時)(IMethodCallMessage 包括methodCall,ProxyOperationRuntime 操作)到 System.ServiceModel.Channels.ServiceChannelProxy.In voke(的iMessage 消息)在[0]〜 System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(的iMessage reqMsg,的iMessage retMsg)

重新拋出異常給 System.Runtime.Remoting.Proxies.RealProxy。 PrivateInvoke(MessageData & MSGDATA,的Int32類型)在 IWS_MG.ProceedOperation(字符串XMLIN) 到WS_MGClient.ProceedOperation(字符串 XMLIN)}

此異常意味着聚類MAXSIZE是65536,並且在接收到的數據大小寬度ST。

任何人都知道如何交流MAXSIZE?

有關信息,這是我的代碼:

try 
        { 
         // Factory Creation with WCF WSDL address 
         DynamicProxyFactory factory = new DynamicProxyFactory(sServiceWsdl); 

         // Solution test which doesn't work  
         foreach (ServiceEndpoint endpoint in factory.Endpoints) 
         { 

          Binding binding = endpoint.Binding; 

          XmlDictionaryReaderQuotas myReaderQuotas = new XmlDictionaryReaderQuotas(); 
          myReaderQuotas.MaxStringContentLength = int.MaxValue; 
          myReaderQuotas.MaxArrayLength = int.MaxValue; 
          myReaderQuotas.MaxBytesPerRead = int.MaxValue; 
          myReaderQuotas.MaxDepth = int.MaxValue; 
          myReaderQuotas.MaxNameTableCharCount = int.MaxValue; 

          binding.GetType().GetProperty("ReaderQuotas").SetValue(binding, myReaderQuotas, null); 
         } 

         // Proxy Creation with Contract's name 
         DynamicProxy proxy = factory.CreateProxy(sContract); 

         XElement XmlIN = XElement.Parse(sXmlIN); 

         // Method call with parameters 
         XElement XmlOUT = XElement.Parse((string)proxy.CallMethod(sMethod, XmlIN.ToString())); 

         sXmlOUT = XmlOUT.ToString(SaveOptions.None); 

         proxy.Close(); 
        } 
        catch (Exception e) 
        { 
         sXmlOUT = new XElement("ALL_XML_OUT", new XElement("APP_TRX", sAppTrx), new XElement("WS_RC", 1), new XElement("ERROR_MESS", e.Message)).ToString(SaveOptions.None); 
        } 
+0

也許解決方案是創建動態地Web引用,而不是服務引用,但我沒有在網上找到 – BaptX

回答

2

我不熟悉的DynamicProxy庫,但綁定對象應該有一個MaxReceivedMessageSize property作爲basicHttpBinding的。您需要將其設置爲適合您應用程序的大於64K的值。另外,請確保服務配置的客戶端正在調用的綁定具有相同的值。

+0

上的任何教程檢查代碼,我已經做到了: myReaderQuotas.MaxStringContentLength = int.MaxValue; – BaptX

+1

對不起,我得到的物業名稱感到困惑,我更新了你應該檢查的其他東西的答案:) –

+0

是的,這兩個需要同步。 –

相關問題