Метод веб-службы ASMX Singleton - PullRequest
       8

Метод веб-службы ASMX Singleton

1 голос
/ 01 октября 2009

Не уверен, что это правильная терминология, позвольте мне объяснить, что я хочу.

У меня есть веб-сервис, доступный в сети - у веб-сервиса есть 1 веб-метод.

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

Я думал о записи значения в объект приложения (как в asp.net), но тогда я должен быть очень осторожным, чтобы убедиться, что это значение обновляется, в случае каких-либо ошибок, это может не произойти ... так что это опасно и приведет к тому, что веб-сервис останется в состоянии, когда никто не сможет к нему добраться.

Нет ли более динамичного способа определить, вызывается ли веб-служба или нет?

Ответы [ 6 ]

3 голосов
/ 01 октября 2009

Вы не можете сделать это с устаревшими веб-сервисами ASMX. Они не поддерживают различные схемы экземпляров.

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

3 голосов
/ 01 октября 2009

Если вы используете WCF, это просто. Используйте настройки регулирования , чтобы указать, что вы хотите, чтобы MaxConcurrentCalls = 1 и MaxInstances = 1. Вы также можете установить для ConcurrencyMode значение Single для ServiceBehavior .

1 голос
/ 01 октября 2009

Вы можете создать мьютекс бедного человека, и первый экземпляр создаст файл, а последовательные экземпляры проверят наличие файла. Попробуйте Catch your web method и поместите удаление файла в наконец.

1 голос
/ 01 октября 2009

Вы можете реализовать проверку внутри веб-метода, так как он будет работать в том же процессе IIS

1 голос
/ 01 октября 2009

Я не очень разбираюсь в веб-сервисах, можете ли вы настроить веб-сервер для запуска только 1 экземпляра вашего веб-сервиса, но вы можете попробовать создать мьютекс в вашем веб-сервисе.

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

Итак, вы можете создать мьютекс с именем, а затем подождать его. Если существует более 1 экземпляра вашего веб-сервиса, мьютекс будет ждать.

0 голосов
/ 01 октября 2009

Если вы WCF, я рекомендую ответ "bobbymcr", но для устаревшего веб-сервиса вы можете использовать вместо него Monitor или mutex, так как mutex стоит дорого (потому что это объект ядра), но если вас не волнует производительность и скорость отклика Сервис Mutex использовать просто.

См. Этот пример для использования класса монитора

private static object lockObject = new object();

public void SingleMethod()
{
try
{
Monitor.TryEnter(lockObject,millisecondsTimeout);
//method code
}
catch
{
}
finally
{
Monitor.Exit(lockObject);
}

}
...