C # все экземпляры канала заняты

Следующий код создает новый поток, действующий сначала как клиент именованного канала для отправки параметров, а затем как сервер для получения результатов. После этого он выполняет функцию в другом домене приложений, выступающем в роли сервера именованных каналов, а затем в качестве клиента для отправки результатов обратно.

public OrderPrice DoAction()
{
  Task<OrderPrice> t = Task<OrderPrice>.Factory.StartNew(NamedPipeClient, parameters);

  if (domain == null)
  {
    domain = AppDomain.CreateDomain(DOMAINNAME);
  }
  domain.DoCallBack(AppDomainCallback);

  return t.Result;
}

static OrderPrice NamedPipeClient(object parameters) {
  OrderPrice price = null;

  using (NamedPipeClientStream stream = new NamedPipeClientStream(PIPE_TO)) {
    stream.Connect();
    SerializeToStream(stream, parameters);
  }

  using (NamedPipeServerStream stream = new NamedPipeServerStream(PIPE_BACK)) {
    stream.WaitForConnection();

    price = (OrderPrice)DeserializeFromStream(stream);
  }

  return price;
}

void AppDomainCallback() {
  OrderPrice price = null;

  using (NamedPipeServerStream stream = new NamedPipeServerStream(PIPE_TO)) {
    stream.WaitForConnection();

    List<object> parameters = (List<object>)DeserializeFromStream(stream);

    if (mi != null)
      price = (OrderPrice)mi.Invoke(action, parameters.ToArray());
}

  using (NamedPipeClientStream stream = new NamedPipeClientStream(PIPE_BACK)) {
    stream.Connect();
    SerializeToStream(stream, price);
  }
}

Код вызывается в среднем один раз в секунду, и он работал нормально в течение 7+ часов. Но в какой-то момент выдается «system.io.ioexception, все экземпляры канала заняты», и после этого они больше не подключаются. Просмотр здесь кажется, что это может быть из-за неправильной утилизации объектов канала, но я думаю, что это все хорошо, так как они внутри использования операторов. Кто-нибудь знает, что здесь может быть не так? Код в .NET 4.0 работает на Windows Server 2008.

Ответы на вопрос(1)

Ваш ответ на вопрос