2010-04-19 2 views
0

Я делаю вызовы WCF от клиента Mono, работающего на Ubuntu (Mono 2.6).Пользовательские заголовки сообщений в WCF на Mono

Я не могу добавить пользовательский заголовок в свои сообщения. Я попробовал два способа:

  • Используя [MessageContract] и [MessageHeader] атрибуты на пользовательский класс
  • Добавление заголовка к исходящим сообщениям программно, например,

    MessageHeader mhg = new MessageHeader ("test");
    MessageHeader untyped = mhg.GetUntypedHeader ("токен", "ns");
    OperationContext.Current.OutgoingMessageHeaders.Add (нетипизированный);

Заголовок не существует, когда звонок достигает сервера! Он всегда равен нулю.

Обратите внимание, что оба метода работают нормально на .NET в Windows. Также обратите внимание, что тело сообщения проходит через Mono.

Я вижу некоторые ссылки в Интернете, которые предполагают эту должны работы:

http://forums.monotouch.net/yaf_postsm1692.aspx
https://bugzilla.novell.com/show_bug.cgi?id=551745

Также - страница состояния Mono показывает, что все MessageHeader материал полностью реализован ...

Кому-то повезло с этим?

Заранее спасибо, Ричард

ответ

1

Я борюсь с подобными проблемами.

Я решил проблему с клиентом и сервером 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); 
    } 

Результатом является то, что названный пользовательский заголовок я обеспечиваю в клиенте отображается в свойстве же названием (с помощью атрибута) на экземпляре параметра метода.

+0

Это решило проблему для меня. Мои MessageHeaders теперь проходят правильно! Я должен был фактически включить пространство имен, а не просто пустую строку. .NET не против, но Mono выбрал исключение из пустого пространства имен. Я напишу его как ошибку, когда у меня появится шанс. Спасибо за вашу помощь! – TheNextman

+0

OK Я думаю, что скоро поговорил.Я понял, что, поскольку я разместил этот вопрос, я обновил свою установку Mono до версии trunk (2.7). Когда я вернусь и испытаю это на 2.6.4, это не сработает. Похоже, что эта ошибка исправлена, но еще не превратилась в релиз. Какую версию Mono вы используете? – TheNextman

+0

Я не: я звоню с клиента Windows. Я не могу помочь с Моно. – Trevor

Смежные вопросы