Ошибка DynamicProxyFactory с размером полученных данных
Я использую dynamicproxyfactory для вызова любого веб-сервиса по пути строки wsdl. К сожалению, когда веб-сервис отвечает на большое количество данных, возникает исключение:
System.ServiceModel.CommunicationException: Le quota de taille maximale autorisée для файлов сообщений (65536) и e-dépassé. Вы можете увеличить свою квоту, используя максимум MaxReceivedMessageSize sur l'élément de la lisonison подходящего. ---> System.ServiceModel.QuotaExceededException: указание максимальной максимальной авторизации для сообщений (65536) и повторного запроса. Вы можете увеличить свою квоту, используя максимум MaxReceivedMessageSize sur l'élément de la lisonison подходящего. --- Фин де ла след де ла интернета ---
Трассировка стека сервера..ParseIncomingMessage(Exception& requestException) à System.ServiceModel.Channels.HttpChannelFactory.HttpRequestChannel.HttpChannelRequest.WaitForReply(время ожидания TimeSpan) Запрос (сообщение-сообщение, время ожидания TimeSpan) à System.ServiceModel.Channels.ServiceChannel.Call (действие String, логический односторонний метод, операция ProxyOperationRuntime, Object[] ins, Object[] outs, TimeSpan timeout) à System.ServiceModel.Channels.ServiceChannelProxy.InvokeService(метод IMethodCallMessageCall, операция ProxyOperationRuntime) à System.ServiceModel.Channels.ServiceChannelProxy.Invoke(IMess возраст сообщение)
Исключение, переброшенное в [0]: à System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg, IMessage retMsg) 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 ответ
Я не знаком с библиотекой DynamicProxy, но объект привязки должен иметь свойство MaxReceivedMessageSize, как в basicHttpBinding. Вам нужно установить для него значение больше 64 КБ, которое подходит для вашего приложения. Также убедитесь, что служба настроена с тем же значением для привязки, которую вызывает клиент.