Служба WCF: несколько пользователей одновременно

Я буду развертывать свое первое приложение на основе WCF и хотел бы узнать, как лучше всего развертывать. Вот моя архитектура. См. Прикрепленное изображение.

У нас есть WCF, написанный на платформе 4.0, и у нас есть 3 метода. Внешний веб-сайт ASP.NET (www.site.com) вызывает WCF для сохранения данных, а также для чтения данных. На рисунке method1 используется для сохранения данных, а method2 и 3 предназначены для чтения данных из базы данных SQL server 2008 R2.

В моем веб-портале ASP.Net ...

  1. Я вызываю Method1 и закрываю соединение ... вот так .. ServiceClient client = new ServiceClient(); client.Method1(data to be saved) client.close();

  2. Я вызываю методы 2 и 3 следующим образом ServiceClient client = new ServiceClient(); dropDown1list.datasource = client.Method2() dropDown2list.datasource = client.Method3() client.close();

Несколько пользователей могут одновременно использовать веб-сайт для отправки данных. Учитывая эту архитектуру ... как лучше всего развернуть WCF, чтобы он мог обрабатывать несколько пользователей одновременно? Я прочитал статью http://www.codeproject.com/Articles/89858/WCF-Concurrency-Single-Multiple-and-Reentrant-and и http://www.codeproject.com/Articles/86007/ways-to-do-WCF-instance-management-Per-call-Per.

Теперь я считаю, что мне нужна моя служба WCF как

 [ServiceBehavior(ConcurrencyMode = ConcurrencyMode.Multiple ,  InstanceContextMode = InstanceContextMode.PerCall )]
public class Service : IService
{
   public bool Method1(data to be saved)
    {

    }

    public List<string> Method2()
    {

    }
    public List<string> Method2()
    {

    }

}

Я прав ?. Какие-либо предложения ?. введите описание изображения здесь


person bp581    schedule 24.04.2014    source источник
comment
Вам, вероятно, больше повезет, если вы зададите этот вопрос на странице Code Review.   -  person Scott Chamberlain    schedule 24.04.2014


Ответы (1)


Только что вчера ответил на аналогичный вопрос. Судя по вашему описанию и изображению, я не вижу необходимости менять вашу архитектуру. Если вы используете одну из основных привязок WCF (webHttpBinding, wsHttpBinding или BasicHTTPBinding), развертываемая служба должна легко обрабатывать десятки одновременных пользователей, сохраняя и читая все одновременно.

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

Последние два года я работал над веб-сервисами WCF в промышленных масштабах. В последнее время я работал над проектом нагрузочного тестирования / бенчмаркинга, который запускает сотни одновременных пользователей, каждый из которых забивает наш тестовый сервер WCF артефактами XML, которые загружаются в базу данных. Нам удалось загрузить до 160 пакетов (около 110кб на каждого клиента) в секунду. WCF не идеален, но он быстрый, чистый и хорошо масштабируется.

По моему опыту, узким местом будет ваша база данных, а не веб-служба WCF. Если ваш клиент хочет масштабировать эту архитектуру до размера веб-сервиса Amazon, вы можете использовать балансировщик нагрузки F5 и таким образом масштабировать его.

person Brian    schedule 25.04.2014