Ich habe einen dynamischen Client für einen Dienst. Wie kann ich die ReaderQuotas-Eigenschaft der Endpunktbindung ändern?Ändern Sie den Endpunkt ReaderQuotas programmgesteuert
ich so versucht, aber es funktioniert nicht ...
DynamicProxyFactory factory = new DynamicProxyFactory(m_serviceWsdlUri);
foreach (ServiceEndpoint endpoint in factory.Endpoints)
{
Binding binding = endpoint.Binding;
binding.GetProperty<XmlDictionaryReaderQuotas>(new BindingParameterCollection()).MaxArrayLength = 2147483647
binding.GetProperty<XmlDictionaryReaderQuotas>(new BindingParameterCollection()).MaxBytesPerRead =2147483647;
binding.GetProperty<XmlDictionaryReaderQuotas>(new BindingParameterCollection()).MaxDepth = 2147483647;
binding.GetProperty<XmlDictionaryReaderQuotas>(new BindingParameterCollection()).MaxNameTableCharCount = 2147483647;
binding.GetProperty<XmlDictionaryReaderQuotas>(new BindingParameterCollection()).MaxStringContentLength = 2147483647;
}
Auch dies der ReaderQuotas Werte bleiben die Standardwerte nach tun.
Ich versuchte auch, wie diese und immer noch nicht funktioniert:
DynamicProxyFactory factory = new DynamicProxyFactory(m_serviceWsdlUri);
foreach (ServiceEndpoint endpoint in factory.Endpoints)
{
System.ServiceModel.Channels.BindingElementCollection bec = endpoint.Binding.CreateBindingElements();
System.ServiceModel.Channels.TransportBindingElement tbe = bec.Find<System.ServiceModel.Channels.TransportBindingElement>();
tbe.MaxReceivedMessageSize = 2147483647;
tbe.MaxBufferPoolSize = 2147483647;
TextMessageEncodingBindingElement textBE = bec.Find<TextMessageEncodingBindingElement>();
if (textBE != null)
{
textBE.ReaderQuotas.MaxStringContentLength = 2147483647;
textBE.ReaderQuotas.MaxArrayLength = 2147483647;
textBE.ReaderQuotas.MaxBytesPerRead = 2147483647;
textBE.ReaderQuotas.MaxDepth = 2147483647;
textBE.ReaderQuotas.MaxNameTableCharCount = 2147483647;
}
}
Ich brauche dies, so kann ich mit dem Service mehr als 8 kb senden.
+1 für diese Dinge zu erwähnen, eingestellt werden muß, bevor die Client-Proxy und/oder Service-Host erstellt werden. Einmal erstellt, sind sie unveränderlich. –
Hallo Marc, Danke für die Antwort, aber ich weiß nicht, welche Art von Bindung es ist, deshalb muss ich es tun, nachdem Bindung erstellt wurde. Irgendwelche anderen Vorschläge? Danke, Adrya – Adrya
Was meinst du, du weißt nicht, welche Art von Bindung es ist. Suchen Sie in der ServiceHostFactory einfach in der Bindung und ändern Sie bei Bedarf das Kontingent. Wenn das, was Sie sagen, ist, wissen Sie nicht, dass Sie das Kontingent ändern müssen, bis Sie die Bindung verwenden, dann ... kann ein Flag gesetzt werden und dann den Host (oder Client-Proxy) neu starten. – Cheeso