Параллелизм настроек WCF и проверка кода - PullRequest
0 голосов
/ 05 марта 2011

У меня есть следующие настройки для моей службы WCF;

InstanceContextMode = InstanceContextMode.PerCall, ConcurrencyMode = ConcurrencyMode.Multiple

Мои методы выглядят так:

  public List<MessagesAPI> GetInboxMessagesByUserID(string UserID)
    {
        int intUserID = 0;

        if (!String.IsNullOrEmpty(UserID))
            intUserID = int.Parse(UserID);

        List<MessagesAPI> listMessages = new List<MessagesAPI>();
        UserMessageCache userMessageCache = new UserMessageCache();

        ApiHelper apiHelper = new ApiHelper();
        string strUserTimeZone = apiHelper.GetUsersTimeZone(intUserID);

        listMessages = userMessageCache.APIGetUserInboxMessagesByUserID(intUserID, strUserTimeZone);

        return listMessages;
    }

Могу ли я столкнуться с какими-либо проблемами, нужно ли мне выполнять какую-либо блокировку или мой код подходит для работы?

Ответы [ 2 ]

2 голосов
/ 05 марта 2011

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

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

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

1 голос
/ 05 марта 2011

Использование InstanceContextMode.PerCall вместе с ConcurrencyMode.Multiple не имеет смысла. Это так же, как InstanceContextMode.PerCall и ConcurrencyMode.Single. Причина в том, что режим InstanceContext определяет, как создается экземпляр службы, а ConcurrencyMode определяет, сколько одновременных запросов может быть обработано одним экземпляром службы. Как только вы установите InstanceContextMode на PerCall, вы прямо скажете, что у каждого запроса будет свой собственный экземпляр службы, поэтому никогда не будет одного экземпляра службы, обрабатывающего несколько одновременных запросов.

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