WCF是否调用处理发送和接收的对象?

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对象.

网上有很多例子(例如这个),但是如果它们发生的话,它们都没有被称为处理或提及.

Eri*_*sch 5

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事件处理程序中.