2017-02-13 9 views
1

ich einen WCF-Server haben,Big Data zu WCF - (413) Request Entity Too

, wenn ich eine Verbindung des Clients (Windows Forms) I durch Code festgelegt, die Bindung Parameter mit diesem Code:

String HTTP_SERVER = http:\\....... 

private static BasicHttpBinding getBinding() 
{ 
    //WSHttpBinding binding = new WSHttpBinding(); 
    BasicHttpBinding binding = new BasicHttpBinding(BasicHttpSecurityMode.None); 

    binding.TextEncoding = System.Text.Encoding.UTF8; 
    binding.ReaderQuotas.MaxArrayLength = int.MaxValue; 

    binding.ReceiveTimeout =new TimeSpan(8, 0,0); 
    binding.SendTimeout = new TimeSpan(8, 0, 0); 

    binding.MaxReceivedMessageSize = int.MaxValue; 
    binding.MaxBufferSize = int.MaxValue; 
    binding.MaxBufferPoolSize = int.MaxValue; 


    binding.ReaderQuotas.MaxDepth = 64; 
    binding.ReaderQuotas.MaxArrayLength= int.MaxValue; 
    binding.ReaderQuotas.MaxStringContentLength = int.MaxValue; 

    return binding; 

} 

ConnectionToServer = new ConnectionToServer (getBinding(), new EndpointAddress(HTTP_SERVER)); 

Dieser Code richtig laufen, aber jetzt brauche ich eine sehr große Datenmengen in Array senden und wenn ich versuche, habe ich diesen Fehler ein großes Array zu senden:

(413) Antrag Entity Too

Ich muss diese Verbindung nach Code und nicht nach XML konfigurieren.

Ich habe Beispiel foud von xml dieses problen nur zu lösen, aber ich brauche von C# -Code zu setzen

notwendig ist, alle Parameter in web.config (WCF Server-Seite) eingestellt?

+0

Does [dieser Stack-Überlauf Frage] (http://stackoverflow.com/questions/12951763/maximum-request -length-overe-in-wkf) antworte dir nicht? – strickt01

+0

Ich versuche es aber nicht @ strickt01 – daniele3004

Antwort

1

Wenn dies auf dem Client ist, können Sie das folgende Verhalten zu Ihrem Channel hinzufügen:

public class MaxItemsInGraphBehavior : IEndpointBehavior 
{ 
    public void AddBindingParameters(ServiceEndpoint endpoint, BindingParameterCollection bindingParameters) 
    { 
    } 

    public void ApplyClientBehavior(ServiceEndpoint endpoint, ClientRuntime clientRuntime) 
    { 
     foreach (OperationDescription operation in endpoint.Contract.Operations) 
     { 
      var dc = operation.Behaviors.Find<DataContractSerializerOperationBehavior>(); 
      if (dc != null) 
      { 
       dc.MaxItemsInObjectGraph = int.MaxValue; 
      } 
     } 
    } 

    public void ApplyDispatchBehavior(ServiceEndpoint endpoint, EndpointDispatcher endpointDispatcher) 
    { 
    } 

    public void Validate(ServiceEndpoint endpoint) 
    { 
    } 
} 
Verwandte Themen