Мое требование - вызвать веб-службу WCF из кода ASP.NET и передать некоторые данные, например:
void Add(int x, int y);
Результат операции должен каким-то образом храниться в веб-службе WCF (переменная-член).Позже пользователь сможет позвонить
double Equals();
и получить результат операции.Конечно, поскольку это открытый веб-сайт, многие пользователи, не прошедшие проверку подлинности, могут открыть страницу ASP.NET и вызвать веб-службу.
В качестве альтернативы метод Add может возвращать «ключ», который можно использовать для получения результата, например:
Guid Add(int x, int y);
double Equals(Guid key);
Я не думаю, что смогу использовать сеансы WCF, так как в Интернетеслужба будет думать, что существует только 1 клиент (WebSite, вызывающий webserivce, размещенный в IIS).Пользователи не аутентифицированы - они анонимные пользователи. Я мог бы использовать: (пожалуйста, посмотрите на мой РЕДАКТИРОВАТЬ)
InstanceContextMode =InstanceContextMode.Single
как атрибут моего веб-сервиса и хранить Dictionary<key, result>
, но проблема в том, когда я могу удалить запись из словаря?Должен ли я использовать какой-то BackgroundWorker для проверки словаря каждые 15 минут и удаления старых записей?В этом случае мне придется хранить DateTime для каждой записи, но это не проблема, если это лучший способ реализовать это решение ...
Мой пример методов Add / Equals предназначен только для иллюстрации проблемы, реальнотребование хранить гораздо больше данных на пользователя, чем простой double
результатЗаранее спасибо за помощь.
РЕДАКТИРОВАТЬ: Подумав больше о InstanceContextMode =InstanceContextMode.Single
, я думаю, что это не лучший вариант для использования с ASP.NET, поскольку, если 100 пользователей будут одновременно вызывать веб-службу, я получу 100 последовательных вызовов, которые вызовут проблемы с производительностью.В этом случае у вас есть идеи, как реализовать это, не меняя настройки InstanceContextMode (насколько я знаю, по умолчанию это PerSession)?