Служба WCF завершается с ошибкой в ​​1 час в течение 30 секунд - PullRequest
4 голосов
/ 05 августа 2011

Я использую Службу WCF локально, чтобы вычислить некоторую информацию, это C #, и вернуть данные.Данные, которые я возвращаю, представляют собой список списков с плавающей точкой List<List< float>>, всего 4 из них.Каждый список поплавков содержит 400 предметов, и в каждой коллекции их по 180.Таким образом, 4 из List<List<float>>

у меня изначально была ошибка с недостаточным пространством, а затем я обновил размер до максимального значения в 2 000 000 байт.вручную установите эти значения.

private void InitializeServiceHost()
{
    if (_serviceHost != null)
    {
        _serviceHost.Close();
    }

    Uri address = new Uri("net.tcp://localhost:6100/ExternalBallistics");
    NetTcpBinding binding = new NetTcpBinding(SecurityMode.None);
    binding.MaxReceivedMessageSize = 2000000;
    binding.MaxBufferSize = 2000000;
    binding.MaxBufferPoolSize = 2000000;
    binding.CloseTimeout = new TimeSpan(1, 10, 0);
    binding.OpenTimeout = new TimeSpan(1, 10, 0);
    binding.ReceiveTimeout = new TimeSpan(1, 10, 0);
    binding.SendTimeout = new TimeSpan(1, 10, 0);
    _serviceHost = new ServiceHost(typeof(ExternalBallisticsImpl), address);
    _serviceHost.Description.Behaviors.Add(GetMetadataBehavior());
    _serviceHost.CloseTimeout = new TimeSpan(1, 10, 0);
    _serviceHost.OpenTimeout = new TimeSpan(1, 10, 0);
    _serviceHost.AddServiceEndpoint(typeof(IExternalBallistics), binding, address);
    _serviceHost.AddServiceEndpoint(ServiceMetadataBehavior.MexContractName, MetadataExchangeBindings.CreateMexTcpBinding(), "mex");

    _serviceHost.Open();
}

Я также установил таймауты на 1 час и 10 минут.

Я получаю ошибку The socket connection was aborted. This could be caused by an error processing your message or a receive timeout being exceeded by the remote host, or an underlying network resource issue. Local socket timeout was '01:09:59.9770000'.

Теперь этот тайм-аутпроисходит в течение 30 секунд.У меня есть модульный тест, который я выполняю, и Служба все делает правильно, и ответ содержит действительные данные, однако, когда он возвращает этот ответ, я всегда получаю эту ошибку.

Я искал и не могу получить ответ, которыйразрешает, как те, что я видел, просто сообщите мне увеличить буфер / тайм-ауты, которые у меня есть.

Ответы [ 2 ]

1 голос
/ 05 августа 2011

Как отметил @Tim в своем комментарии, это может быть проблемой того, что сервер не может общаться с клиентом через ~ 30 секунд. Возможно, клиент уже закрыл соединение.

Убедитесь, что настройки привязки на клиенте совпадают с настройками сервера. В особенности убедитесь, что значение receiveTimeout клиента соответствует значению sendTimeout.

сервера.
1 голос
/ 05 августа 2011

Несмотря на то, что сообщается как исключение тайм-аута, это может быть другой проблемой.

Если вы попытаетесь установить Set maxItemsInObjectGraph, чтобы убедиться, что вы можете отправить большой граф объектов.

  <serviceBehaviors>

    <behavior name="MyBehavior">

      <dataContractSerializer maxItemsInObjectGraph="2147483647"/>

      <serviceMetadata />

    </behavior>

  </serviceBehaviors>

</behaviors>

Просто перейдите по следующей ссылке, если она поможет:

http://davybrion.com/blog/2008/09/wcf-and-large-amounts-of-data/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...