Я борюсь с подобными проблемами.
Я решил проблему с клиентом и сервером C #. Предполагая, что вы правильно понимаете клиента, мой опыт может помочь:
Мой метод обслуживания выглядит следующим образом:
public FileUploadResult UploadFileSegment(FileUploadMessage uploadMessage)
И мой класс параметров метода обслуживания выглядит так:
[MessageContract]
public class FileUploadMessage
{
[MessageHeader(MustUnderstand = false, Name="Metadata", Namespace = "")]
public FileUploadMetadata Metadata;
[MessageBodyMember(Order = 1)]
public Stream FileByteStream { get; set; }
}
Обратите внимание на присвоения Name = и Namespace = внутри атрибута.
Когда я внедряю заголовки сообщений на стороне клиента, я также указываю имя и пространство имен. В C # это выглядит так:
using (OperationContextScope contextScope = new OperationContextScope(proxy.InnerChannel))
{
OperationContext.Current.OutgoingMessageHeaders.Add(MessageHeader.CreateHeader("Metadata", "", uploadHeader));
proxy.UploadFileSegmentAsync(uploadMessage);
}
В результате именованный пользовательский заголовок, который я предоставляю клиенту, сопоставляется со свойством с аналогичным именем (через атрибут) в экземпляре параметра метода.