我有一个ASP.Net应用程序,允许用户通过早期绑定实体与Dynamics CRM 2011数据进行交互。
我目前正在会话中存储ServiceContext和OrganizationServiceProxy,原因是我必须获取特定类型的对象,然后在用户需要时获取它们的相关实体。最后在用户点击保存时更新它们。
我知道ServiceContext和OrganizationServiceProxy实现了IDisposable,因此应该处理掉。目前我在Global.asax的会话结束时这样做。
我正在测试我的想法,但是当我获得我的实体或完成整个过程时,我是否应该在实际中实例化并处理代理和上下文?
所有MS指南都显示将整个过程包装在using语句中,以便处理对象,但如果该过程需要用户交互,该怎么办?
答案 0 :(得分:1)
除非你每页请求只使用一次OrganizationServiceProxy,否则我会创建一个公共函数,每个请求只延迟一次OrganizationServiceProxy加载,然后使用unload方法在加载时处理它(参见{{3为了这种方法的安全性)
这在大多数情况下都有意义。请记住,Using语句没有任何特殊之处,除了它实际上保证了dispose方法将被调用。可能值得一些边缘情况的可接受风险导致处理不是为了更清洁的代码而被调用,而不是为单个请求打开5个不同的连接。
我认为在会话中存储上下文和代理是非常危险的,因为人们可以去喝咖啡或者休息一下,而且你会遇到大量未使用的开放连接。