Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Асинхронные запросы к серверу, WSDL 
:(
    Опции темы
Shootnik
Дата 5.11.2012, 17:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 21
Регистрация: 20.9.2008

Репутация: нет
Всего: нет



Есть wsdl-файл. Подключил через "Service References": здесь Exchange. Последовательно запросы посылаються без проблем(в данном примере запросы на размещение ставки). Но при попытке реализации отправки запросов в разных потоках(асинхронно), запросы послыаются только по 2 за один раз.
Чтобы проверить запускаю поток и смотрю сколько времени потребуется на запрос. Если поток 1, то время на запрос будет примерно 165мск, если 2 - тоже 170. Потом, при увеличении потоков получаю: 4 - 325, 6 - 610 и т.д. Т.е. выходит, что запросы совсем не параллельны: пока есть 2 работающих потока, остальные "спят".
Сначала грешил на сеть, но если запустить 2 или 3 версии нижеприведенного кода, ситуация со временем в каждой консоле будет одинакова и такая же, если бы была запущена одна консоль. Потоки на вычисление исполняются без проблем и практически одновременно. А вот именно запросы обращения к серверу через WSDL никак у меня не выходят.
2 дня голову ломаю, пробовал асинхронно через делегаты запускать, пробовал через BackgroundWorker - ничего не помогает.
Где собака зарыта? В какую сторону копать? 
Код

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ComponentModel;

namespace TestConsole
{
    class Program
    {
        static void Main(string[] args)
        {
            //количество потоков
            int nOfThreads = 1;
            //запуск потоков
            System.Threading.Thread[] myThread = new System.Threading.Thread[nOfThreads]; 
            for (int i = 0; i < myThread.Length; i++)
            {
                myThread[i] = new System.Threading.Thread(checkIn);
                myThread[i].Start();
            }
            Console.ReadLine();
        }
        //функция, которая выполняется асинхронно
        static void checkIn()
        {
            //формирование запроса, функциональной наргрузки эта часть кода не несет
            Exchange.PlaceBetsReq placeReq = new Exchange.PlaceBetsReq();
            Exchange.PlaceBetsResp placeResp = new Exchange.PlaceBetsResp();
            Exchange.BFExchangeServiceClient bfEx = new Exchange.BFExchangeServiceClient();
            placeReq.header = new Exchange.APIRequestHeader();
            placeReq.header.sessionToken = sessionToken;
            placeReq.bets = new Exchange.PlaceBets[1];
            for (int i = 0; i < placeReq.bets.Length; i++)
            {
                placeReq.bets[i] = new Exchange.PlaceBets();
                placeReq.bets[i].asianLineId = 0;
                placeReq.bets[i].betCategoryType = Exchange.BetCategoryTypeEnum.E;
                placeReq.bets[i].marketId = 105629371;
                placeReq.bets[i].betPersistenceType = Exchange.BetPersistenceTypeEnum.NONE;
                placeReq.bets[i].betType = Exchange.BetTypeEnum.L;
                placeReq.bets[i].bspLiability = 15;
                placeReq.bets[i].price = 1.01;
                placeReq.bets[i].selectionId = 56343548;
                placeReq.bets[i].size = 4;
            }
            //таймер
            System.Diagnostics.Stopwatch sw = new System.Diagnostics.Stopwatch();
            //100 запросов к серверу, с выводом времени, затраченного на запрос, в консоль
            for (int i = 0; i < 100; i++)
            {
                sw.Restart();
                placeResp = bfEx.placeBets(placeReq);
                Console.Write(Math.Round(sw.Elapsed.TotalMilliseconds) + "/");
            }
        }
    }
}

PM MAIL ICQ   Вверх
lomaster
Дата 7.11.2012, 16:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 101
Регистрация: 27.5.2012

Репутация: нет
Всего: 2



у вас тут 1 поток.
betfair ? тестовая или рабочая зона (или как там оно)? там ограничения на тестовую не стоят случайно?

PM   Вверх
Shootnik
Дата 8.11.2012, 01:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 21
Регистрация: 20.9.2008

Репутация: нет
Всего: нет



Здесь в коде - да, 1 поток. Но изменяя количество потоков получаю то, что писал раньше. Ограничений нет. Betfair. К примеру, если запустить несколько консолей, то количество запросов будет равным: 2 * количество консолей.
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.0620 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.