Вы можете использовать наследование, чтобы определить связь между двумя контрактами сообщений:
[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
, потому что у вас не может быть массива заголовков сообщений, и более over Stream может бытьв большинстве случаев это единственный доступный элемент тела, и он должен быть только один.Поэтому, если вам нужно передать несколько файлов, вы также должны реализовать сжатие (zip) и отправить один поток.