gpt4 book ai didi

c# - WCF 调用是否处理传输和接收的对象?

转载 作者:太空狗 更新时间:2023-10-30 01:03:54 24 4
gpt4 key购买 nike

我们有一个契约(Contract)使用流传递一个大对象。服务和消息契约归结为如下内容。

[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 类提供一次性模式的标准实现。我的问题是 WCF 是否调用了 Item 类的 Dispose 方法。通过 ServiceHost 的 WCF 基本上负责从我们的服务契约实现中传递和接收 Item 对象。

网络上有很多示例(例如 this ),但没有一个在发生时调用 dispose 或提及。

最佳答案

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。但是,这由默认为 true 的 OperationBehaviorAttribute.AutoDisposeParameters 属性控制。

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

关于c# - WCF 调用是否处理传输和接收的对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25752511/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com