Создание службы WCF Restful, проблемы параллелизма - PullRequest
5 голосов
/ 15 января 2011

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

Вот пример того, что у меня есть;

[ServiceBehavior(IncludeExceptionDetailInFaults = true, InstanceContextMode = InstanceContextMode.Single, ConcurrencyMode = ConcurrencyMode.Multiple)] 

И это пример вызова метода;

    public UsersAPI getUserInfo(string UserID)
    {
        UsersAPI users = new UsersAPI(int.Parse(UserID));

        return users;
    }



    [OperationContract]
    [WebGet(BodyStyle = WebMessageBodyStyle.Bare, ResponseFormat = WebMessageFormat.Json, UriTemplate = "User/{UserID}")]
    [WebHelp(Comment = "This returns a users info.")]
    UsersAPI getUserInfo(string UserID);

1 Ответ

7 голосов
/ 15 января 2011

Лучшим подходом было бы использовать:

  • InstanceContextMode.PerCall
  • ConcurrencyMode.Single

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

Кроме того, при таком подходе вы можете легко «масштабировать», например, просто добавьте больше серверов для обработки более высокой нагрузки (серверы в ваших местах или «в облаке», например, работники Windows Azure).

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

<serviceBehaviors>
  <behavior name="Throttling">
     <serviceThrottling 
             maxConcurrentCalls="16"
             maxConcurrentInstances="16"
             maxConcurrentSessions="10" />
  </behavior>
</serviceBehaviors>

Это значения по умолчанию для WCF 3.5 - настройки maxConcurrentCalls определяют, сколько абонентов может обрабатываться одновременно.

Дополнительные сведения см. В документах MSDN по регулированию обслуживания .

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