gpt4 book ai didi

c# - WCF 流文件问题

转载 作者:行者123 更新时间:2023-11-30 16:22:01 25 4
gpt4 key购买 nike

是否可以使用 WCF 和一个包含另一个 MessageContract 的 MessageContract 来流式传输文件?我认为答案是否定的,但我更愿意将我的文件打包在可以这么说的“Root”消息中。

换句话说,我的设置是这样的:

[MessageContract]
public class Transport
{
[MessageHeader]
private readonly Guid fId;

[MessageHeader]
private readonly DateTime fTimestamp;

[MessageBodyMember(Order = 1)]
public FileTransferMessage FileTransferMessage { get; set; }
}

[MessageContract]
public class FileTransferMessage : IDisposable
{
[MessageBodyMember(Order = 1)]
public Stream FileByteStream;

[MessageHeader(MustUnderstand = true)]
public long FileLength;

[MessageHeader(MustUnderstand = true)]
public string FileName;
}

请求发送和接收到服务都很好,但是,流似乎没有被正确反序列化并作为空引用返回。我知道我已经在某个地方读到一条规则,该规则在带有流的 MessageContract 上声明 Stream 必须是 MessageContract 的主体,我认为这就是现在所违反的。我希望 FileTransferMessage 作为 Body,然后 Stream 作为 Body 是可以接受的。

有人对我在这里可以做什么有什么建议吗?我不想将 Stream/FileName/FileLength 添加到我的 Transport 对象。

最佳答案

作为设计 MessageContract 团队的一员,我可以告诉你答案是否定的 :) MessageContract 恰好代表一个完整的 SOAP 消息,你不能将它们相互嵌套(你的示例中的 FileTransferMessage 只是交给序列化程序,序列化程序对 [MessageContract] 属性一无所知并忽略它,并且对任何特殊的 Stream 行为一无所知。

除了创建自定义 Message 子类(甚至自定义 Stream 子类)之外,我想不出一个好的解决方案。如果 fId 和 fTimestamp 在每条消息上,请考虑使用自定义消息检查器来注入(inject)它们,然后在您的操作中使用 FileTransferMessage。

这里的权威文件是http://msdn.microsoft.com/en-us/library/ms730255.aspxhttp://msdn.microsoft.com/en-us/library/ms733742.aspx

关于c# - WCF 流文件问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12801968/

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