gpt4 book ai didi

c# - 在 WCF 的其他契约(Contract)中将 MessageContract 作为 MessageBodyMember

转载 作者:太空宇宙 更新时间:2023-11-03 22:07:25 24 4
gpt4 key购买 nike

我可以在 WCF 中使用递归 MessageContract 吗?例如:

我需要发布一些参数,其中一个参数是一个文件流数组。这是我的操作合约:

DomainResult AddSomethingNew(int externalCustomerId, string domainName, bool isDefault, FileDataContract[] files);

这是我的消息合约:

[MessageContract]
public class FileDataContract
{
[MessageHeader(MustUnderstand=true)]
public int ExternalCustomerId { get; set; }

[MessageHeader(MustUnderstand=true)]
public string DomainName{get;set;}

[MessageHeader(MustUnderstand=true)]
public bool IsDefault{get;set;}

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

[MessageContract]
public class FileUploadInputParameter
{
[MessageHeader(MustUnderstand = true)]
public string FileName { get; set; }

[MessageHeader(MustUnderstand = true)]
public decimal FileSize { get; set; }

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

需要你的帮助..

最佳答案

您可以使用继承来定义两个消息契约之间的关系:

[MessageContract]
public class FileUploadInputParameter
{
[MessageHeader(MustUnderstand = true)]
public string FileName { get; set; }

[MessageHeader(MustUnderstand = true)]
public decimal FileSize { get; set; }

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

[MessageContract]
public class FileDataContract : FileUploadInputParameter
{
[MessageHeader(MustUnderstand=true)]
public int ExternalCustomerId { get; set; }

[MessageHeader(MustUnderstand=true)]
public string DomainName{get;set;}

[MessageHeader(MustUnderstand=true)]
public bool IsDefault{get;set;}
}

您不能像在 FileDataContract 中描述的那样定义消息契约,因为您不能拥有消息头数组,而且在大多数情况下,Stream 可能是唯一可用的正文元素,而且它必须只有一个。因此,如果您需要传递多个文件,您还应该实现一些压缩 (zip) 并发送单个流。

关于c# - 在 WCF 的其他契约(Contract)中将 MessageContract 作为 MessageBodyMember,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7899079/

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