Robert Król

Robert Król project manager,
wsparcie projektów
innowacyjnych

Temat: WebServices, NHibernate i Iesi.Collections

Zapragnąłem poznać NHibernate i mile spędzić czas nie martwiąc się już o większość zapytań SQL. Jednakże w jednym ze scenariuszy, trzeba przesłać obiekt ORM za pomocą WebServices do innej usługi i tu pojawia się problem...

Korzystając ze standardowego podejścia (oznacz metodę jako [WebMethod]) nie udało mi się zmusić całości do działania (problem z serializowaniem kolekcji).

google znajduje rozwiązania, ale oparte o WCF, którego w tym projekcie wykorzystać nie mogę:/


Czy ktoś miał podobny problem i może wspomóc mnie rozwiązaniem?

konto usunięte

Temat: WebServices, NHibernate i Iesi.Collections

Robert Król:
Zapragnąłem poznać NHibernate i mile spędzić czas nie martwiąc się już o większość zapytań SQL. Jednakże w jednym ze scenariuszy, trzeba przesłać obiekt ORM za pomocą WebServices do innej usługi i tu pojawia się problem...

Korzystając ze standardowego podejścia (oznacz metodę jako [WebMethod]) nie udało mi się zmusić całości do działania (problem z serializowaniem kolekcji).

Obiekt NHibernate nie jest w żaden sposób związany (poza referencją w session) z ORMem, więc najprostsze podejście na pewno zadziała:


[WebMethod]
public List<DaoObjectClass> HelloWorld()
{
List<DaoObjectClass> retVal = new List<DaoObjectClass>();
retVal.Add(new DaoObjectClass() { Field1 = "a1", Field2 = "a2" });
return retVal;
}

public class DaoObjectClass
{
public string Field1 { get; set; }
public string Field2 { get; set; }
}


Pamiętaj, że IList nie jest serializowalny, musisz użyć tablicy lub List.

konto usunięte

Temat: WebServices, NHibernate i Iesi.Collections

Właśnie zdałem sobie sprawę w czym dokładniej problem. Spróbuj zainicjować zwracaną kolekcję w ten sposób:


[WebMethod]
public List<DAO.Member.Member> HelloWorld()
{
IList<DAO.Member.Member> nHibernateMembersList = DAO.Member.Member.LoadAll();
List<DAO.Member.Member> exposedMembersList = new List<DAO.Member.Member>(nHibernateMembersList);
return exposedMembersList;
}
Michał C.

Michał C.
Projektant/Programis
ta .NET, ITBoom

Temat: WebServices, NHibernate i Iesi.Collections

Pierwsze co mi przychodzi na myśl to możliwość, że przesyłasz przez WS proxy do obiektów, a nie zaciągnięte obiekty. Jesteś na 100% pewny, że problem leży po stronie serializacji?
Robert Król

Robert Król project manager,
wsparcie projektów
innowacyjnych

Temat: WebServices, NHibernate i Iesi.Collections

List<DAO.Member.Member> exposedMembersList = new List<DAO.Member.Member>(nHibernateMembersList);
rozumiem. czyli mój błąd leży w tym, że wykorzystuje kolekcje dostarczoną przez NH - Iesi, która niestety nie implementuje ISerializable...
czy te iesi to jakiś przeżytek jest? dopiero zaczynam się uczyć, to warto by było poznać best-practices :]

Jesteś na 100% pewny, że problem leży po stronie serializacji?
w 100% nie, ale taki dostaje wyjątek to zgaduje :)

Następna dyskusja:

Fluent NHibernate problem z...




Wyślij zaproszenie do