Не работает почтовая синхронизация для писем с общим размером более 30
MB
Симптомы
При выполнении синхронизации почтовых сообщений, размер которых (включая тело письма и все вложения) превышает 30 МБ, возникает ошибка при обращении к эндпоинту ServiceModel/ExchangeListenerService.svc/NewEmail в BPMSoft.
В логах сервиса синхронизации почты регистрируются соответствующие ошибки с полным трассировочным следом (stack trace):
System.Net.Http.HttpRequestException: Error while copying content to a stream. ---> System.IO.IOException: Unable to read data from the transport connection: Broken pipe. ---> System.Net.Sockets.SocketException (32): Broken pipe --- End of inner exception stack trace --- at System.Net.Sockets.Socket.AwaitableSocketAsyncEventArgs.ThrowException(SocketError error, CancellationToken cancellationToken) at System.Net.Security.SslStream.<WriteSingleChunk>g__CompleteAsync|210_1[TWriteAdapter](ValueTask writeTask, Byte[] bufferToReturn) at System.Net.Security.SslStream.WriteAsyncChunked[TWriteAdapter](TWriteAdapter writeAdapter, ReadOnlyMemory`1 buffer) at System.Net.Security.SslStream.WriteAsyncInternal[TWriteAdapter](TWriteAdapter writeAdapter, ReadOnlyMemory`1 buffer) at System.Net.Http.HttpConnection.WriteAsync(ReadOnlyMemory`1 source) at System.Net.Http.HttpContent.CopyToAsyncCore(ValueTask copyTask) --- End of inner exception stack trace --- at System.Net.Http.HttpContent.CopyToAsyncCore(ValueTask copyTask) at System.Net.Http.HttpConnection.SendRequestContentAsync(HttpRequestMessage request, HttpContentWriteStream stream, CancellationToken cancellationToken) at System.Net.Http.HttpConnection.SendAsyncCore(HttpRequestMessage request, CancellationToken cancellationToken) at System.Net.Http.HttpConnectionPool.SendWithNtConnectionAuthAsync(HttpConnection connection, HttpRequestMessage request, Boolean doRequestAuth, CancellationToken cancellationToken) at System.Net.Http.HttpConnectionPool.SendWithRetryAsync(HttpRequestMessage request, Boolean doRequestAuth, CancellationToken cancellationToken) at System.Net.Http.RedirectHandler.SendAsync(HttpRequestMessage request, CancellationToken cancellationToken) at System.Net.Http.DiagnosticsHandler.SendAsync(HttpRequestMessage request, CancellationToken cancellationToken) at System.Net.Http.HttpClient.FinishSendAsyncBuffered(Task`1 sendTask, HttpRequestMessage request, CancellationTokenSource cts, Boolean disposeCts) at ListenerBase.DataSend.EventClient.PostAsync(String requestUri, HttpContent content) in /src/ListenerBase/DataSend/EventClient.cs:line 43 at ListenerBase.DataSend.EventDataSender.Send(String url, LoadEmailCommand data, Credentials credentials, String logInformation) in /src/ListenerBase/DataSend/EventDataSender.cs:line 147 at ListenerBase.DataSend.EventDataSender.SendEmail(LoadEmailCommand data, SynchronizationCredentials credentials, String logInformation) in /src/ListenerBase/DataSend/EventDataSender.cs:line 168 at ListenerBase.Email.Load.BaseEventProcessor.SendRequestObject(LoadEmailCommand requstDtoObject, SynchronizationCredentials credentials) in /src/ListenerBase/Email/Load/BaseEventProcessor.cs:line 159 at ListenerBase.Email.Load.BaseEmailEventProcessor.SendEmailMessageToBpm(IEmail message, LoadMessageInfo loadmessageInfo, SynchronizationCredentials credentials) in /src/ListenerBase/Email/Load/BaseEmailEventProcessor.cs:line 90
В логах веб-сервера фиксируются ошибки с кодом 400 (Bad Request) при попытке обработки запросов. Это приводит к тому, что почтовые сообщения общим размером более 30 МБ не могут быть успешно загружены в BPMSoft.
Причина
В конфигурации приложения установлено ограничение на размер входящего запроса по умолчанию — 30 МБ (MaxRequestBodySizeBytes). При попытке отправки запроса из сервиса синхронизации почты на сторону BPMSoft, превышающего этот лимит, происходит разрыв соединения, что приводит к невозможности создания письма в BPMSoft.
Решение
Порядок действий:
- Открыть файл конфигурации.
- В секцию <appSettings> добавить следующую строку:
<add key="MaxRequestBodySizeBytes" value="{value}" />
где {value} - желаемое значение ограничения в байтах
По умолчанию максимальный размер обрабатываемого запроса составляет 30 МБ. Данная настройка определяет верхний предел размера запроса, который может быть обработан на стороне BPMSoft.