我正在学习 .NET Web 服务简介课程,我们目前正在学习的其中一件事是 IDisposable 接口。作为一个相对简单的例子,我创建了一个带有MyMethod()
操作的服务(服务器/客户端)。该方法在调用时仅打印一条跟踪语句。我还在我的服务器上实现了 IDisposable Dispose()
,再次在服务器实现的版本中使用简单的 WriteLine 跟踪来实现该方法。
在我的客户端中,我使用 ChannelFactory 创建了两个代理。在 proxy1 上,我调用了MyMethod()
3 次操作,然后有几行代码用于处理 proxy1:
var castedProxy = (IDisposable)proxy1;
castedProxy.Dispose();
在 proxy2 上,我再次调用该MyMethod()
操作 3 次,但这次我不强制转换和调用Dispose()
. 当我运行服务器/客户端时,我得到了 6 次相同的跟踪:
服务器的 Trace + CurrentThread ID
MyMethod() 的 Trace + CurrentThread ID
Dispose() 的 Trace + CurrentThread ID
我的问题是:为什么Dispose()
跟踪的部分每次都会发生,即使我只使用前 3 个跟踪?我的猜测是,这与使用 BasicHttpBinding 时本身没有会话管理这一事实有关,因此旧资源仍然存在,打印旧的 Dispose() 调用。
提前感谢您提供的任何见解!:)