关于动态crm 2011:Session中的ServiceContext和OrganizationServiceProxy

ServiceContext and OrganizationServiceProxy in Session

我有一个 ASP.Net 应用程序,它允许用户通过早期绑定的实体与 Dynamics CRM 2011 数据进行交互。

我目前将 ServiceContext 和 OrganizationServiceProxy 存储在会话中,原因是我必须获取特定类型的对象,然后在用户需要时获取它们的相关实体。最后在用户点击保存时更新它们。

我知道 ServiceContext 和 OrganizationServiceProxy 实现了 IDisposable,因此应该被处理掉。目前我在 Global.asax 的会话结束时执行此操作。

我正在测试我的想法,但我是否应该在获得实体或完成整个过程时实例化并处理代理和上下文?

所有 MS 指南都显示将整个过程package在 using 语句中,以便处理对象,但如果该过程需要用户交互怎么办?


除非您在每个页面请求中只使用一次 OrganizationServiceProxy,否则我将创建一个通用函数,该函数在每个请求中仅延迟加载一次 OrganizationServiceProxy,然后在加载时使用 unload 方法处理它(请参阅关闭连接为了安全起见,在"卸载"方法中使用这种方法)

这在大多数情况下都是有意义的。请记住,Using 语句并没有什么特别之处,它实际上保证了 dispose 方法将被调用。为了更简洁的代码,一些边缘情况导致 dispose 不被调用,并且不为单个请求打开 5 个不同的连接,这可能是值得接受的风险。

我认为在会话中存储上下文和代理对你来说是非常危险的,因为人们可以去喝杯咖啡或去洗手间,而你会被大量未使用的打开连接所困。