#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. Поток уже разделен на фрагменты.