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

标签 c# .net wcf soap messagecontract

我可以在 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/

相关文章:

c# - 为视频生成缩略图

java - 安卓 : What kind of encryption do I choose to send my data safely to an app using WCF?

WCF 使用 Https Web 服务,错误 : Could not establish trust relationship for the SSL/TLS secure channel with authority

c# - System.IdentityModel.Tokens 和 Microsoft.IdentityModel.Tokens 之间的冲突

c# - 如何针对两个不同的对象列表实现 List.Remove?

c# - MVC 4 回发空 View 模型

.net - .NET 中的代码注入(inject)

c# - 如何使用自定义模型 Binder 对路由进行单元测试

c# - 如何在 AutoFac 中注册具有接口(interface)类型的通用接口(interface)?

c# - WCF 动态响应格式