Я использую динамический 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);
}