2013-05-31 7 views
8

Próbuję dodać niestandardową właściwość do kolekcji BrokeredMessage.Properties przed wysłaniem jej do magistrali usług Azure. Typ właściwości niestandardowej to element wyliczeniowy:Magistrala usług Windows Azure - BrokerMessage.Properties z wartością wyliczeniową

[Serializable, DataContract] 
public enum FooBar 
{ 
    [EnumMember] 
    Foo = 0, 
    [EnumMember] 
    Bar = 1 
} 

Próbowałem także wielu kombinacji atrybutów i wersji bez atrybutów.

Jest to kod, który dodaje właściwość i wysyła wiadomość:

var brokeredMessage = new BrokeredMessage(new MessageObject(){ //etc }); 
brokeredMessage.Properties.Add("FooBar", FooBar.Foo); 
queueClient.Send(brokeredMessage); 

następujący błąd jest zwracany, gdy próbuje wysłać wiadomość:

System.Runtime.Serialization.SerializationException : Serialization operation failed due to unsupported type Namespace.FooBar. 

Próbowałem wyśledzić bardziej szczegółową dokumentację na temat ograniczeń BrokeredMessage.Properties (jeśli istnieją) i nie można znaleźć niczego, co określa, że ​​można używać tylko typów pierwotnych.

Jakieś pomysły, dlaczego to nie działa?

Edit:

Gdyby powiedział Używam V2.1.0.0 z Microsoft.ServiceBus.

Odpowiedz

10

Wkrótce można używać tylko prostych typów, takich jak ciąg, liczby całkowite.

Twoim przypadku, można spróbować na dwa sposoby

  1. brokeredMessage.Properties.Add ("foobar", (int) FooBar.Foo);
  2. brokeredMessage.Properties.Add ("FooBar", FooBar.Foo.ToString());

Wybierz sam, który z nich jest lepszy dla Ciebie.

+0

Dzięki za odpowiedź. Stało się to jasne, chociaż wydaje się, że brakuje na ten temat dokumentacji (chyba, że ​​ktoś może wskazać mi kierunek)? Zawsze wolę konwersję wartości wyliczeniowych na int, a nie na ciąg znaków - więc jest to opcja, z którą poszedłem. – GaryJL