C # WCF Web Api 4 MaxReceivedMessageSize

Estoy usando el marco de WCF Web Api 4.0 y me estoy ejecutando en el maxReceivedMessageSize ha superado el error 65,000.

He actualizado mi webconfig para tener este aspecto, pero debido a que estoy usando la API de WCF, creo que ya no se usa porque ya no uso un punto de acceso webHttpEndpoint?

  <!-- Configure the WCF REST service base address via the global.asax.cs file and the default endpoint via the attributes on the  element below -->   

¿Dónde especifico MaxReceivedMessageSize en el nuevo sitio web de WCF?

También he probado una CustomHttpOperationHandlerFactory sin éxito:

  public class CustomHttpOperationHandlerFactory: HttpOperationHandlerFactory { protected override System.Collections.ObjectModel.Collection OnCreateRequestHandlers(System.ServiceModel.Description.ServiceEndpoint endpoint, HttpOperationDescription operation) { var binding = (HttpBinding)endpoint.Binding; binding.MaxReceivedMessageSize = Int32.MaxValue; return base.OnCreateRequestHandlers(endpoint, operation); } } 

Si está intentando hacer esto programáticamente (mediante el uso de MapServiceRoute con HttpHostConfiguration.Create), la forma en que lo hace es así:

 IHttpHostConfigurationBuilder httpHostConfiguration = HttpHostConfiguration.Create(); //And add on whatever configuration details you would normally have RouteTable.Routes.MapServiceRoute(serviceUri, httpHostConfiguration); 

El NoMessageSizeLimitHostConfig es una extensión de HttpConfigurableServiceHostFactory que se parece a algo como:

 public class NoMessageSizeLimitHostConfig : HttpConfigurableServiceHostFactory { protected override ServiceHost CreateServiceHost(Type serviceType, Uri[] baseAddresses) { var host = base.CreateServiceHost(serviceType, baseAddresses); foreach (var endpoint in host.Description.Endpoints) { var binding = endpoint.Binding as HttpBinding; if (binding != null) { binding.MaxReceivedMessageSize = Int32.MaxValue; binding.MaxBufferPoolSize = Int32.MaxValue; binding.MaxBufferSize = Int32.MaxValue; binding.TransferMode = TransferMode.Streamed; } } return host; } } 

maxReceivedMessageSize es una propiedad que debe definir en el enlace que está utilizando. WCF en .Net 4 introdujo la configuración simplificada, por lo que si no configura nada, se usarán los valores predeterminados. El ejemplo a continuación es válido para el enlace wshttpBinding, debe enmendarlo de acuerdo con su enlace usado y registrarlo en su web.config (suponiendo que está usando un servicio alojado en IIS) en la sección de enlace de servicemodel.

         

HTH Dominik

Si está alojando en IIS, puede establecer los valores donde quiera que defina la ruta (en mi caso, el global.asax). Si tiene TransferMode configurado en búfer (el valor predeterminado), también deberá establecer MaxBufferSize en el mismo valor que MaxReceivedMessageSize .

 protected void Application_Start() { var config = new HttpConfiguration(); config.MaxReceivedMessageSize = int.MaxValue; config.MaxBufferSize = int.MaxValue; RouteTable.Routes.MapServiceRoute("api", config); } 

Así es como puedes hacerlo en código.

 var endpoint = ((HttpEndpoint)host.Description.Endpoints[0]); //Assuming one endpoint endpoint.TransferMode = TransferMode.Streamed; endpoint.MaxReceivedMessageSize = 1024 * 1024 * 10; // Allow files up to 10MB 

Si crea su propio host personalizado, derivado del estándar, hay un método que puede sobrecargar para configurar el HttpEndpoint.