Я пытаюсь описать мою проблему подробно.Наша цель - отправка объектов в службу wcf, которая обрабатывается и отвечает другим объектом.Если мы отправим 1000, 2000 объект, у нас будет успешный результат.Но когда мы увеличиваем размер объекта, как 10.000, 20.000, сервер ждет 1-1.30 минут, а затем отвечает 504 ошибка шлюза.Сначала на стороне клиента мы загружаем файл, затем читаем его на стороне сервера.Мы инициализируем объект чтения данных и отправляем этот объект в сервис.Мой контроллер вроде:
public ActionResult SaleNotification(NOTIFICATION_OBJECT notificationItem, HttpPostedFileBase files)
{
if (files != null)
{
List<NOTIFICATION_ITEM_OBJECT> fileItems = new List<NOTIFICATION_ITEM_OBJECT>();
using (var package = new StreamReader(files.InputStream))
{
package.ReadLine();
while (!package.EndOfStream)
{
var values = package.ReadLine().Split(';');
if (values[0] != "" && values[1] != "" && values[2] != "" && values[3] != "")
{
fileItems.Add(new NOTIFICATION_ITEM_OBJECT
{
GT = values[0],
SN = values[1].ToUpper(),
BN = values[2].ToUpper(),
XD = values[3]
});
}
}
}
notificationItem.NOTIFICATION_ITEMS.AddRange(fileItems);
}
var res = _serviceRepository.SendNotification(Security.Decrypt(SERVICE_PASS_ENCRYPT, true), notificationItem);
return PartialView("PartialResult", res);
}
Отправляя уведомление в сервисную часть, я пытался отправить весь объект за один раз, может быть, в этой части мой подход был неверным.Вот мой код:
public NOTIFICATION_RESULT_OBJECT SendNotification( string password, NOTIFICATION_OBJECT notification)
{
var res = new NOTIFICATION_RESULT_OBJECT();
try
{
var client = new serviceClient();
if (client.ClientCredentials != null)
{
client.ClientCredentials.UserName.Password = password;
}
using (new OperationContextScope(client.InnerChannel))
{
#region header
var requestMessage = new HttpRequestMessageProperty();
OperationContext.Current.OutgoingMessageProperties[HttpRequestMessageProperty.Name] = requestMessage;
#endregion
//Some codes service request initialize
ServicePointManager.ServerCertificateValidationCallback = delegate (object s, System.Security.Cryptography.X509Certificates.X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors) { return true; };
var response = client.notify(serviceRequest);
res.NOTIFICATION_ID = response.NOTIFICATIONID;
foreach (var item in response)
res.PRODUCT_RESULT_LIST.Add(new PRODUCT_RESULT()
{
GT = item.GT,
RC = item.RC,
SN = item.SN,
BN = item.BN,
XD = item.XD.ToString("dd/MM/yyyy", new CultureInfo("tr-TR")),
});
return res;
}
}
catch (Exception ex)
{
Log4NetFunction.InsertLog(ex);
return res;
}
}
}
На моих привязках есть конфигурация о maxReceivedMessageSize, sendTimeout, receiveTimeout и т. Д. Вот пример одной из моих привязок:
<binding name="serviceBinding" maxBufferSize="2147483647" maxReceivedMessageSize="2147483647" openTimeout="00:10:00"
closeTimeout="00:10:00" sendTimeout="00:15:00" receiveTimeout="00:10:00">
<security mode="Transport">
<transport clientCredentialType="Basic" proxyCredentialType="Basic" realm="" />
<message clientCredentialType="Certificate" algorithmSuite="Default" />
</security>
</binding>
В моемотладка Я не смог найти никакой ошибки, он отправил 20000 объектов успешно на локально или нет журнала об этой ошибке на сервере.Поэтому я не мог найти никакого решения.Как я могу решить эту проблему?Мой подход неверен?