IIS7.5 — (413) Объект запроса слишком большой

#asp.net-mvc #wcf #iis-7.5

#asp.net-mvc #wcf #iis-7.5

Вопрос:

Я видел все подобные вопросы, но мне это не помогло.

У меня есть приложение WCF, которое работает как служба Windows. Также у меня есть asp.net сайт mvc5, который работает против IIS 7.5.

И, как видно из названия, я получаю ответ 413 при попытке загрузить файлы с суммарным размером более 10 МБ.

Мой хост WCF имеет следующие привязки TCP:

 var tcpBinding = new NetTcpBinding
                {
                    ReliableSession = { InactivityTimeout = new TimeSpan(0, 12, 0, 0) },
                    MaxReceivedMessageSize = Int32.MaxValue,
                    MaxBufferPoolSize = Int32.MaxValue,
                    CloseTimeout = new TimeSpan(0, 5, 0),
                    ReceiveTimeout = new TimeSpan(0, 5, 0),
                    SendTimeout = new TimeSpan(0, 5, 0),
                    TransferMode = TransferMode.StreamedResponse,
                    ReaderQuotas = new XmlDictionaryReaderQuotas
                    {
                        MaxDepth = Int32.MaxValue,
                        MaxArrayLength = Int32.MaxValue,
                        MaxBytesPerRead = Int32.MaxValue,
                        MaxNameTableCharCount = Int32.MaxValue,
                        MaxStringContentLength = Int32.MaxValue
                    }
                };
  

Мой соединитель WCF (на веб-сайте) имеет следующие привязки:

 NetTcpBinding
            {
                MaxReceivedMessageSize = Int32.MaxValue,
                MaxBufferPoolSize = Int32.MaxValue,
                CloseTimeout = timeout5Min,
                ReceiveTimeout = timeout5Min,
                OpenTimeout = timeout5Min,
                SendTimeout = timeout5Min,
                TransferMode = TransferMode.Streamed,
                ReaderQuotas = new XmlDictionaryReaderQuotas
                {
                    MaxDepth = Int32.MaxValue,
                    MaxArrayLength = Int32.MaxValue,
                    MaxBytesPerRead = Int32.MaxValue,
                    MaxNameTableCharCount = Int32.MaxValue,
                    MaxStringContentLength = Int32.MaxValue
                }
            };
  

Я установил это в конфигурации IIS в файле applicationHost.config:

 <location path="Site">
        <system.webServer>
            <serverRuntime uploadReadAheadSize="20971520" />
        </system.webServer>
    </location>
  

У меня есть следующие настройки в файле Web.config веб-сайта:

 <requestFiltering>
    <requestLimits maxAllowedContentLength="20971520" />
</requestFiltering>
  

Но у меня все еще есть ответ 413.
Локально он отлично работает с IIS Express. По этой причине я почти уверен, что дело в IIS 7.5, а не в конфигурации хоста WCF.

Пожалуйста, дайте мне идеи, как устранить его :).

UPD. Код хоста:

 string address = "net.tcp://localhost:8001/WcfService";
var wcfService = new WcfService();
ServiceHost _svcHost = new ServiceHost(wcfService, new Uri[] { });
var tcpBinding = (see above line "var tcpBinding = new NetTcpBinding...")
_svcHost.AddServiceEndpoint(typeof(IWcfService), tcpBinding, address);
_svcHost.Open();
  

Код клиента:

 IWcfService _service = ChannelFactory<IWcfService>.CreateChannel(GetNetTcpBinding(),
                    new EndpointAddress(String.Format("net.tcp://{0}:{1}/{2}", _hostAddress, _port, _serviceName)));
var co = (ICommunicationObject)_service;
co.Open();
  

Комментарии:

1. Можете ли вы опубликовать код, в котором вы создаете хост службы и клиент?

2. Пожалуйста, смотрите выше.

3. попробуйте изменить кодировку передачи на фрагментированную

4. Что вы имеете в виду? Я прочитал этот TransferMode. Поток уже разделен на фрагменты.