我创建了一个ASMX Web服务,它在场景后面执行一些Active Directory。
由于我希望在用户会话下保留Web服务中的某些信息,我决定放置[WebMethod(EnableSession = true)]
并开始使用Session
变量。
但是,当我打开该选项时,应用程序的返回时间 - >网络服务 - >应用程序变得荒谬可笑。 (大约一分钟或更长时间)。
如果我删除[WebMethod(EnableSession = true)]
,则相当快。
任何人都知道发生了什么事?
答案 0 :(得分:6)
可能的原因:
编辑:
对于#2,显而易见的解决方案是避免使用会话状态 - 例如,您是否可以将相关信息放入另一个存储区(如缓存或数据库)(昂贵)。
如果您只是在Web服务中读取会话状态,那么您可以利用只读会话状态(请参阅IReadOnlySessionState)。只读会话状态允许并发只读请求 - 读/写请求仍将阻止所有其他请求。现在,来自EnableSession
属性的WebMethod
不支持此功能 - 它不提供会话或读/写会话。因此,其中一个解决方法是实现自己的实现IReadOnlySessionState
的处理程序,然后使用http模块将asmx请求路由到thi处理程序,然后稍后将处理程序切换为默认处理程序。因为您的处理程序需要只读会话状态,所以您将具有只读会话状态 - 请参阅此forum post,其中已经给出了切换处理程序的http模块。