Какой подход лучше всего подходит для обработки нескольких веб-запросов с помощью C#?
Я создал веб-службу (WCF) с помощью C#.
В котором пользователь указывает входные параметры в URL-адресе, что входные параметры сохраняются в файле (temp. inc) и переопределяются в соответствии с новыми запросами. затем вывод XML генерируется в соответствии с заданными входными данными. Но когда несколько запросов пытаются получить доступ к веб-службе одновременно, то возникают конфликты, и только первый запрос получает вывод XML, а остальные все получают ошибку.
Существует ли какой-либо способ обработки нескольких запросов, чтобы только один запрос мог получить доступ к веб-службе одновременно, а остальные запросы будут ждать, пока не будут выполнены первые запросы.
Я хотел знать, как лучше всего сделать это с помощью C#.
Что я уже пробовал:
Я попробовал сделать это с помощью многопоточности, но из-за недостаточных знаний на C# я еще не получил никакого решения той же проблемы.
ZurdoDev
Вы должны отправить вывод xml обратно в качестве ответа на запрос, а не помещать его в файл.
Member 12793392
@RyanDev: Нет, я не могу этого сделать, потому что в моем веб-сервисе 2 временных файла 1. temp.inc и 2. tempdata.xml. Я генерирую XML-файл данных модуля Doors, и этот файл генерируется в соответствии с заданным входом в URL. Входные параметры хранятся в файле temp. inc, а затем tempdata.xml файл переопределяется и отображается в браузере.
Проблемы возникают, когда несколько пользователей пытаются получить доступ к веб-службе одновременно, а затем файл temp.inc конфликтует и получает ошибку.
Richard Deeming
Измените свой код таким образом, чтобы вы передавали параметры непосредственно методу, который генерирует данные, и метод возвращал данные напрямую, а не полагался на временные файлы.
Итак, вместо:
void GenerateData() { YourSettingsClass theSettings = ReadSomeSettingsFromAFile("temp.inc"); YourDataClass theData = GenerateTheData(theSettings); SaveTheDataToAFile(theData, "tempdata.xml"); }
ты бы так и сделал:
YourDataClass GenerateData(YourSettingsClass theSettings) { YourDataClass theData = GenerateTheData(theSettings); return theData; }
Вы не только избежите проблемы, с которой столкнулись, но и значительно повысите производительность своего кода.
F-ES Sitecore
Решение состоит не в том, чтобы дросселировать WCF, чтобы запросы обрабатывались по одному, а в том, чтобы не использовать один и тот же временный файл для всех запросов. См. Решение 1 для возможного обходного пути, но это тот путь, который вы хотите использовать.