WCF przekazywanie obiektu klasy

Odpowiedz Nowy wątek
2010-04-23 14:49
0

Walcze z tym już dobre pół dnia i nie mogę tego rozwiązać.
Mój problem polega na tym że obiekt ktory wysyłam z hosta a obiekt ktory otrzymuję u klienta są różne.
po krótce

Moj interfejs

    [ServiceContract()]
    interface ISimpleTalkServiceInterface
    {
        [OperationContract]
        void LogIn(int account_number);

        [OperationContract]
        void LogOut(int account_number);

        [OperationContract]
        void SendMessage(ServiceMessage service_message);

        [OperationContract]
        ServiceMessage ReceiveMessage(int account_number);
    }

klasa ServiceMessage

    [DataContract]
    class ServiceMessage
    {
        [DataMember]
        public int sender_account { get; set; }

        [DataMember]
        public int addresser_account { get; set; }

        [DataMember]
        public string message_type { get; set; }

        [DataMember]
        public string database_message_type { get; set; }

        [DataMember]
        public string message_body { get; set; }
    }

host zawiera instancje klientów, w ktorym gromadzi wiadomości do nich.
Podczas gdy klient wywoła ReceiveMessage, jedna wiadomość z kolejki jest mu zwracana.
Problem polega na tym że u klienta co prawda otrzymuję wiadomość, aczkolwiek jest ona inna, tzn wygląda to tak jakby nowo stworzony przed chwilą obiekt typu ServiceMessage czyli wartosci 0,0,null,null,null.

Każda pomoc się przyda. Oczywiście wiadomości w postaci typów prostych jak int, string przechodzą bez problemu.

Rzecz jasna mogę napisać po stronie serwera i clienta metody ktore będą konwertowały obiekt klasy do string-a w te i we wte, ale wiem że da się to zrobić oznaczając klasę jako DataContract i pola jako DataMember, na przykładach w internecie widziałem zrobione to w taki sam sposób.


Pozostało 580 znaków

2010-04-23 21:29
0

a jak ustawisz sie breakpointem na return w ReceiveMessage to zwracany obiekt typu ServiceMessage nie jest pusty? (tzn 0,0,null,null,null)

glupie, ale kto wie, dodaj atrybut Serializable klasie ServiceMessage i zrob ja public

i jeszcze jak w kliencie laczysz sie z serwisem?

Pozostało 580 znaków

2010-04-23 22:13
0

Sprawdzałem wysyłanie wiadomości w każdym miejscu jakie mi do głowy przyszło, na serwisie receive zwraca obiekt z danymi, a u klienta ten obiekt jest już jako pusty.
łączyłem się używając ChannelFactory podając endpointaddress oraz binding, w tej chwili używałem nettcpbinding.

Ale przed chwilą znalazłem odpowiedź, Przyczyna leżała jeszcze gdzieś indziej.

[Dla potomnych]
W związku z tym że host i client były oddzielnymi projektami i wszystko pisałem z palca, klasa ServiceMessage na hoscie i cliencie miała różne Namespace, trzebabyło dodać w atrybucie DataContract(Namespace=
jakąś wartość taką samą po jednej stronie i po drugiej.

A mojej połowy dnia nikt mi juz nie odda ;P


Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0