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

时间:2014-09-09 19:50:14

标签: c# .net 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() {...}
}

Item类提供了Disposable模式的标准实现。我的问题是WCF调用Item类的Dispose方法。通过ServiceHost的WCF基本上负责从我们的服务合同实现中传递和接收Item对象。

网上有很多例子(例如this),但是如果它们发生的话,它们都不会被称为处置或提及。

1 个答案:

答案 0 :(得分: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.. 

编辑:

我发现你实际上是在谈论服务的返回值。在这种情况下,是..默认情况下,WCF将对传入的参数和返回的参数调用dispose。但是,这由OperationBehaviorAttribute.AutoDisposeParameters属性控制,该属性默认为true。

如果将此值设置为false,则负责调用dispose,通常在OperationContext.OperationCompleted事件处理程序中。