Проблема с ответом WCF - получение нескольких ответов - PullRequest
1 голос
/ 17 сентября 2009

Я использую Silverlight, комбинацию WCF.

В настоящее время я столкнулся с одной проблемой с ответом службы.

Я использую тип сервиса ответа на запрос.

У меня есть 100 предметов, и я собираюсь вызвать 100 служб, чтобы получить их свойства.

foreach (ItemDto item in items)
{

   ServiceCall(); 
   ServiceSendCount++;
}


private void OnServiceCallCompleted(.....)
{
    ServiceReceiveCount++;
}

Если я отправляю 5 вызовов службы, он возвращается с 5 * 5 = 25 ответами. то же самое, что когда я посылаю 10 вызовов службы, он возвращает 10 * 10 = 100 ответов.

Я не могу понять, в чем была проблема ...

Кто-нибудь может пролить свет на это?

Обновление:

Пожалуйста, ознакомьтесь с методом вызова службы. Я согласен, что каждый раз, когда я отправляю OnServiceCallCompleted ..

foreach (ItemDto item in items)
{

   itemPropertyService.GetItemProperties([parameters] , OnServiceCallCompleted);
   ServiceSendCount++;
}


private void OnServiceCallCompleted(.....)
{
    ServiceReceiveCount++;

    /* here contains my logic to process the response
       If it cames mulriple time then my logic will down 
    */
}

Можете ли вы дать мне знать решение для того же. Так как смена услуги сейчас невозможна.

Но это создаст проблему времени отклика.

Предположим, я собираюсь отправить запрос на 100 товаров одновременно.

В моем первом приближении я получу первые 100 ответов с правильными данными в течение 5-10 секунд.

ItemPropertyService itemPropertyService = new ItemPropertyService();
foreach (ItemDto item in items) 
{
     itemPropertyService.GetItemProperties([parameters] , OnServiceCallCompleted);  
     ServiceSendCount++; 
}

(Проблема, о которой я говорил, отправит мне 100 X 100 ответов, что приведет к таймауту)

Во втором подходе (как вы и предлагали)

foreach (ItemDto item in items) 
{
      ItemPropertyService itemPropertyService = new ItemPropertyService();
      itemPropertyService.GetItemProperties([parameters] , OnServiceCallCompleted);
      ServiceSendCount++; 
}

Я получаю те же ответы, что и на запрос, но это займет около 2 минут.

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

Знаете ли вы об этом, как решить эту проблему?

Я как раз рядом, чтобы решить мою проблему.

1 Ответ

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

Невозможно определить из кода, поскольку вы не показывали функцию ServiceCall (), но цифры показывают, что вы повторно используете один и тот же объект прокси и добавляете обработчик события OnServiceCallCompleted каждый раз, когда делаете запрос. Если вы добавляете один и тот же обработчик событий несколько раз, он будет срабатывать несколько раз, и завершенный обработчик событий будет для каждого прокси-объекта, а не для запроса.

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

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