Ошибка DynamicProxyFactory с размером полученных данных - PullRequest
2 голосов
/ 24 июня 2011

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

System.ServiceModel.CommunicationException: Le quota de taille maximale autorisée Участники сообщений (65536) Этопад. Залейте квоту, использовать собственное дело MaxReceivedMessageSize sur l'élément де ля связи ---> System.ServiceModel.QuotaExceededException: Le quota de taille maximale autorisée Участники сообщений (65536) Этопад. Залейте квоту, использовать собственное дело MaxReceivedMessageSize sur l'élément де ля связи --- плавник де ла след де ла исключение интерн ---

Трассировка стека серверов: а System.ServiceModel.Channels.HttpInput.ThrowMaxReceivedMessageSizeExceeded () à System.ServiceModel.Channels.HttpInput.GetMessageBuffer () à System.ServiceModel.Channels.HttpInput.ReadBufferedMessage (Stream inputStream) System.ServiceModel.Channels.HttpInput.ParseIncomingMessage (Исключение & requestException) а System.ServiceModel.Channels.HttpChannelFactory.HttpRequestChannel.HttpChannelRequest.WaitForReply (TimeSpan тайм-аут) System.ServiceModel.Channels.RequestChannel.Request (Message сообщение, TimeSpan timeout) а System.ServiceModel.Dispatcher.RequestChannelBinder.Request (Message сообщение, TimeSpan timeout) а System.ServiceModel.Channels.ServiceChannel.Call (String действие, логическое одностороннее, Операция ProxyOperationRuntime, Object [] ins, Object [] outs, TimeSpan тайм-аут) System.ServiceModel.Channels.ServiceChannelProxy.InvokeService (IMethodCallMessage methodCall, ProxyOperationRuntime операция) а System.ServiceModel.Channels.ServiceChannelProxy.Invoke (Шеззаде сообщение)

Исключение переброшено в [0]: а System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage (Шеззаде reqMsg, IMessage retMsg) à System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke (MessageData & msgData, тип Int32) IWS_MG.ProceedOperation (String xmlIn) à WS_MGClient.ProceedOperation (String XMLin)}

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

Кто-нибудь знает, как изменить максимальный размер?

Для информации, это мой код:

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

1 Ответ

2 голосов
/ 24 июня 2011

Я не знаком с библиотекой DynamicProxy, но объект привязки должен иметь свойство MaxReceivedMessageSize , как в basicHttpBinding.Вам необходимо установить значение больше 64 КБ, которое подходит для вашего приложения.Кроме того, убедитесь, что для service настроено то же значение для привязки, к которой обращается клиент.

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