Веб-сервис не обрабатывает несколько одновременных запросов от одного приложения с прокси-классом - PullRequest
2 голосов
/ 13 мая 2011

У меня есть приложение, которое планирует несколько задач, которые вызывают разные веб-сервисы, некоторые из которых имеют один и тот же веб-сервис, но другой метод.Каждая задача выполняется с интервалом, и каждая задача выполняется в своем собственном потоке.Чтобы получить ссылку на веб-сервис, у меня есть сгенерированный прокси-класс wsdl.exe, который создается внутри каждой из задач и всегда располагается.Однако при запуске приложения задачи фактически ожидают друг друга при запросах на обслуживание, веб-служба не обрабатывает запрос на обслуживание от задачи y до того, как его запрос на обработку завершен из задачи x (я могу видеть это, поскольку вызов службы из задачи x может занять5 минут и задача y 100 миллисекунд, однако, если y запускается, когда x выполняется, он завершается через 100 миллисекунд после x).

Это код из задачи (работающей в своем собственном потоке):

public class TaskX : TaskWrapper
{
    public TaskX(Guid id, string name, EventQueue eventqueue)
        : base(id, name, eventqueue)
    {
    }

    protected override void DoTask()
    {

        try
        {
            var factory = new ServiceReferenceFactory();
            using (var reference = factory.GetServiceReference())
            {

                bool result;
                bool isSpecified;

                reference.Run(out result, out isSpecified);
            }
        }
    }
}

Это код из фабричного метода, упомянутого выше:

public ProxyClassService GetServiceReference()
    {
                    var refer = new ProxyClassServiceNamespace.ProxyClassService();
                    refer.Timeout = 1000 * 60 * 60;

                    return refer;
    }

Кто-нибудь знает, почему я испытываю такое поведение?

РЕДАКТИРОВАТЬ:

Вот некоторые журналы из задач после того, как я добавил [ServiceBehavior (InstanceContextMode = InstanceContextMode.PerCall)] к реализации моей службы wcf.Я не внес никаких изменений в конфигурацию службы wcf, созданной в Visual Studio 2008.

15: 02 - Задача запущена: TaskXWithInternalException

15: 02 - Задача запущена: TaskYQuickOne

15: 02 - Задание завершено: TaskYQuickOne Время выполнения задачи: 00: 00: 00.1214762

15: 02 - Задание запущено: TaskZSlowOne

15: 03 - Задание запущено: TaskXWithInternalException

15:03 - Задание запущено: TaskYQuickOne

15: 05 - Задание завершено: TaskZSlowOne Время выполнения задачи: 00: 03: 11.6510947

15: 05 - Задание завершено: TaskYQuickOne Время выполнения задачи: 00: 02: 09.7311905

15: 06 - Задача запущена: TaskYQuickOne

15: 06 - Задача завершена: TaskYQuickOne Время выполнения задачи: 00: 00: 00.0546980

1 Ответ

2 голосов
/ 13 мая 2011

Вероятно, это связано с параметрами параллелизма / создания экземпляров в вашей службе WCF.

Если все ваши вызовы поступают в один и тот же экземпляр службы (например, InstanceContextMode = PerSession or Single), токак правило, вам нужно убедиться, что вы установили ConcurrencyMode на Multiple, в противном случае вызовы обслуживаются поочередно.

Не могли бы вы рассказать нам больше о том, как сервис WCF (не клиент)установка

...