den*_*ver 4 .net c# wcf idisposable
我们有一个使用流传递大型对象的合同.服务和消息合同归结为类似的东西.
[ServiceContract]
public interface IData
{
[OperationContract]
Item Get(ItemRequest request);
[OperationContract]
void Put(Item request);
}
[MessageContract]
public class Item: IDisposable
{
[MessageBodyMember(Order = 1)]
public Stream FileByteStream;
public void Dispose() {...}
}
Run Code Online (Sandbox Code Playgroud)
Item类提供了Disposable模式的标准实现.我的问题是WCF调用Item类的Dispose方法.通过ServiceHost的WCF基本上负责从我们的服务合同实现中传递和接收Item对象.
网上有很多例子(例如这个),但是如果它们发生的话,它们都没有被称为处理或提及.
WCF不对该对象"承担责任".WCF只是序列化您在一侧传递给它的对象,并在另一侧创建一个新对象.
WCF真的没有什么可以取得所有权......所以我不确定为什么你会认为WCF有任何理由来处理传递给它的对象.
通常,你会做这样的事情:
var proxy = new MyService();
var myobject = new MyObject();
proxy.Send(myobject);
// here myobject is still alive, and you can still do things with it..
Run Code Online (Sandbox Code Playgroud)
编辑:
我发现你实际上是在谈论服务的返回值.在这种情况下,是..默认情况下,WCF将对传入的参数和返回的参数调用dispose.但是,这由OperationBehaviorAttribute.AutoDisposeParameters属性控制,该属性默认为true.
如果将此值设置为false,则负责调用dispose,通常在OperationContext.OperationCompleted事件处理程序中.