Как я понимаю, необходимость извлечения строкового массива возникает из-за падения производительности, которое вызовет отдельная передача туда и обратно. Чтобы обойти это, вы можете создать отдельный объект для подачи источника данных вашего объекта. Этот объект будет иметь два метода: один для получения массива строк, а другой - для получения данных для сетки (т. Е. Метод выбора)
Затем вы можете поместить объект, подобный этому, на свою страницу и получать данные в нем ленивым образом. Если объект вызывает какой-либо из данных, он сохраняет другую часть в поле. Затем вы можете использовать событие ObjectDataSource ObjectCreating для передачи этого объекта на вашей странице в ObjectDataSource
protected void odsSomething_ObjectCreating(object sender, ObjectDataSourceEventArgs e)
{
e.ObjectInstance = YourInsntanceAlreadyInThePage;
}
Таким образом, вы избежите поездки туда и обратно.
Также рассмотрите возможность одновременного выполнения двух вызовов веб-службы с использованием асинхронных вызовов клиента, чтобы вы могли выполнять оба вызова одновременно. Если это возможно, зависит от вашей логики.