Эмуляция параллелизма или многопоточности в приложении WCF C # - PullRequest
0 голосов
/ 20 октября 2019

Я занимаюсь разработкой сервисно-ориентированного приложения для системы бронирования отелей с использованием архитектуры WCF. Он состоит из трех следующих трех компонентов: 1. Служба WCF, имеющая контракты на обслуживание и данные для вызова модулей бронирования номеров. 2. Хост WCF, который ведет журнал доступа клиентов к сервису. 3. Клиент WCF с пользовательским интерфейсом для бронирования отелей.

Я ищу рекомендации по реализации параллелизма в моем приложении, обладающие следующими функциями: 1. Одновременно может быть рассмотрен только один запрос. 2. Если получено более одного запроса, их следует синхронизировать с помощью блокировок / мьютексов / семафоров.

Рекомендации по кодированию должны быть полезны.

1 Ответ

1 голос
/ 22 октября 2019

Я думаю, что это проблема выделения внешних ресурсов, таких как доступ к базе данных, ввод / вывод для одного файла. WCF поддерживает транзакции и передает их на стороне клиента. Мы можем заблокировать доступ к базе данных с помощью транзакции, когда другой клиент пытается получить к ней доступ.
https://docs.microsoft.com/en-us/dotnet/framework/wcf/feature-details/transactions-overview
Кроме того, мы также можем использовать общую блокировку, которая блокирует экземпляр службы, занимая все ресурсы, чтобыдругой экземпляр для доступа к службе, см. приведенный ниже код.

    [ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall,
 ConcurrencyMode = ConcurrencyMode.Multiple)]
class MyService : IMyContract
{
 public void MyMethod()
 {
 lock(typeof(MyService))
 {
 ...
 MyResource.DoWork();
 ...
 }
 }
}
static class MyResource
{
 public static void DoWork()
 {
 lock(typeof(MyService))
 {
 ...
 }
 }
}

См. ссылку ниже, Chaper8 (управление параллелизмом), ресурсы и службы, предотвращение тупиков.
https://ashishmit99.files.wordpress.com/2013/01/oreilly-programming-wcf-services-3rd-edition-aug-2010.pdf
Вот официальный документ, касающийся режима параллелизма, целью которого является разрешение конфликта доступа со стороны нескольких пользователей.
https://docs.microsoft.com/en-us/dotnet/framework/wcf/feature-details/sessions-instancing-and-concurrency

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