метод wcf в цикле? - PullRequest
       1

метод wcf в цикле?

0 голосов
/ 17 сентября 2010

Использование следующего сценария при использовании метода WCF:

List<TList> MyList ; // contains 1000 rows
MyWCFclient svc = new  MyWCFclient;

foreach ( var g in MyList){
    g.field1inMyList = svc.getCalc( g.field2inMyList )
}

svc.Close();

Может быть хорошая реализация для повторного использования метода wcf, производительности и т. Д.?

Ответы [ 2 ]

2 голосов
/ 17 сентября 2010

Каждый вызов getMyInt будет отдельным диалогом, с небольшим количеством накладных расходов на каждый вызов.Так что нет, это не будет хорошей реализацией, если у вас действительно был цикл, быстро вызывающий getMyInt 1000 раз подряд.Однако, поскольку ваш пример немного надуманный (он ничего не выполняет / не возвращает), трудно предложить лучший способ улучшить его.

Редактировать : я вижу по вашим изменениямчто у вас есть список объектов, содержащих два свойства.Вы используете веб-сервис для получения одного значения от другого.Поэтому наиболее оптимальным способом решения этой проблемы было бы передать все значения в веб-службу одновременно, например:

List<TList> MyList ; // contains 1000 rows
MyWCFclient svc = new  MyWCFclient;

var field2Values = MyList.Select(x => x.field2inMyList).ToArray();
var field1Values = svc.getCalc(field2Values);

for (int i = 0; i < field1Values.Length; i++) 
{
    MyList[i].field1inMyList = field1Values[i];
}

svc.Close();

Оба field2Values и field1Values являются массивами и существует только один вызов службы WCF.

0 голосов
/ 17 сентября 2010

Возможно, вы захотите создать «массовую» версию этой сервисной операции, чтобы позволить ей принимать список в качестве параметра (MyList в этом случае). Эта новая операция будет вызывать ту же бизнес-логику для каждого элемента и возвращать результаты в целом.

Это должно уменьшить накладные расходы. Но не забудьте адаптировать параметры конфигурации Max * MessageSize, чтобы справиться с потенциально большими сообщениями, связанными с этим случаем.

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