【发布时间】:2011-04-13 15:49:26
【问题描述】:
我的要求是从后面的 ASP.NET 代码调用 WCF Web 服务并传递一些数据,例如:
void Add(int x, int y);
操作的结果应该以某种方式存储在 WCF Web 服务(成员变量)中。 以后的用户应该可以调用
double Equals();
并得到操作的结果。当然,由于它是一个开放的网站,许多未经身份验证的用户可以打开 ASP.NET 页面并调用 Web 服务。
另外,Add 方法可以返回“key”,用于返回结果,例如:
Guid Add(int x, int y);
double Equals(Guid key);
我认为我不能使用 WCF 会话,因为 Web 服务会认为只有 1 个客户端(网站调用托管在 IIS 中的 webserivce)。
用户未经身份验证 - 他们是匿名用户。
我可以使用:(请查看我的编辑)
InstanceContextMode =InstanceContextMode.Single
作为我的网络服务的属性并存储Dictionary<key, result>,但问题是我什么时候可以从字典中删除条目?
我应该使用某种 BackgroundWorker 来检查字典,例如15 分钟并删除旧条目?在这种情况下,我必须针对每个条目存储 DateTime 但如果这是实施此解决方案的最佳方式,那不是问题......
我的示例 Add/Equals 方法仅用于说明问题,实际要求需要为每个用户存储比简单的 double 结果更多的数据
提前感谢所有帮助。
编辑:
在对InstanceContextMode =InstanceContextMode.Single 进行了更多思考之后,我认为这不是与 ASP.NET 一起使用的最佳选择,因为如果 100 个用户同时调用 Web 服务,我将获得 100 个顺序调用,这将导致性能问题。
在那种情况下,您有什么想法如何在不更改 InstanceContextMode 设置的情况下实现这一点(据我所知,默认情况下是 PerSession)?
【问题讨论】:
标签: asp.net wcf web-services session caching