Novo

Forum kao aplikacija na telefonu

Dodajte forum na početni ekran i koristite ga kao aplikaciju, sa menijem na dnu ekrana.

  • 8 odgovora
  • 3.631 pregleda

Najnovija ↓

Workflow Persistence Serializable Problem 06.10.2008. u 14:06 · pre 220 meseci #1
Pozdrav,

Imam WF podignut kao WCF servis. U servisu imam naravno Interface sa nekim metodama i jedna od metoda vraca XElement klientu.

I sada klient zovne Servis servis obradi i vrati Xelement. Sve u redu.

Problem nastaje kada servis treba da Persistuje "metodu" tj dobijm error:
"errorTerminated Type 'System.Xml.Linq.XElement' in Assembly 'System.Xml.Linq, Ve
rsion=3.5.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' is not marked as serializable."

I sada kada zelim da nastavim sa WF-om, tj. pokusam da "probudim" WF iz baze sa odredjenim ID-om i dobijem error kao da ne postoji taj ID u bazi.

Ako kod metode povratni tip stavim u string sve radi bez problema.

Gde sam pogresio i sta se misli pod "not marked as serializable"? Gde da markiram i sta? :)

Hvala
Re: Workflow Persistence Serializable Problem 06.10.2008. u 14:46 · pre 220 meseci #2
Mozes li detaljnije napisati kako obradjujes dobijeni rezultat i kako ga snimas u bazu?

Fazon je u tome da ako preko WCF razmenjujes podatke oni moraju biti serijalizabilni zbog prenosa preko mreze, to u principu znaci da te klase moraju imati atribut Serializable.

Ako vec dobijas samo jedan element kao povrtanu vrednost onda mozes od njega na klijentu napraviti XElement.
Potpis
Free advice is seldom cheap.
Re: Workflow Persistence Serializable Problem 07.10.2008. u 08:33 · pre 220 meseci #3
Citat:
bags: Mozes li detaljnije napisati kako obradjujes dobijeni rezultat i kako ga snimas u bazu?

Fazon je u tome da ako preko WCF razmenjujes podatke oni moraju biti serijalizabilni zbog prenosa preko mreze, to u principu znaci da te klase moraju imati atribut Serializable.

Ako vec dobijas samo jedan element kao povrtanu vrednost onda mozes od njega na klijentu napraviti XElement.


Pa snima se sam u bazu kao i sam se vadi iz baze ja mu samo proslijedim ID.

Ne radi.
Code:

[OperationContract]
        XElement DodajSaglasnost(DataTable[] tables);



Radi
Code:
[OperationContract]
       string DodajSaglasnost(DataTable[] tables);


Xelement koji zelim da vratim
Code:
return new XElement(

            "Success",
            new XElement("Source", "Workflow"),
            new XElement("Command", command),
            new XElement("Type", typeof(XElement)),
            new XElement("Description", description))


Za smjestanje u bazu zaduzeno je (dio koda)
Code:

SqlWorkflowPersistenceService persistService = new SqlWorkflowPersistenceService(connectString, unloadOnIdle,
                instanceOwnershipDuration, loadingInterval);


Ako ti sta jos treba samo reci.

P.S. Negde procita da je XElement serijalizabilan a ovo vidim
Code:

namespace System.Xml.Linq
{
    // Summary:
    //     Represents an XML element.
    [XmlSchemaProvider("", IsAny = true)]
    public class XElement : XContainer, IXmlSerializable
......


Hvala
Re: Workflow Persistence Serializable Problem 07.10.2008. u 10:00 · pre 220 meseci #4
Probaj ovako:

Code:

[XmlSerializerFormat]
[OperationContract]
XElement DodajSaglasnost(DataTable[] tables);


Verovatno ce ici malo sporije, ali trebalo bi da radi.
Potpis
Free advice is seldom cheap.
Re: Workflow Persistence Serializable Problem 13.10.2008. u 13:48 · pre 219 meseci #6
Pa pogledaj da li XElement ima atribut Serializable.

Ako ne, moraces da nadjes drugi objekat preko kog ces preneti vrednosti. Ja nemam iskustva sa XElementom, pa ne mogu reci nista o tome, ali ako "ono" ne radi, a "ono drugo" radi, samo XElement moze biti problem.

Zasto ne napravis svoj objekat koji ce prenositi vrednosti ka klijentu, a da bude Serializable? Tako je najlakse.

...

Proverio sam. XElement nema odgovarajuce svojstvo. Napravi svoj objekat.
Potpis
Nije važno stići prvi. Važno je prvo da stigneš.
Re: Workflow Persistence Serializable Problem 13.10.2008. u 13:59 · pre 219 meseci #7
Citat:
Dragan BL: 
P.S. Negde procita da je XElement serijalizabilan a ovo vidim
Code:

namespace System.Xml.Linq
{
    // Summary:
    //     Represents an XML element.
    [XmlSchemaProvider("", IsAny = true)]
    public class XElement : XContainer, IXmlSerializable
......


Citat:
bunker: Pa pogledaj da li XElement ima atribut Serializable.

Ako ne, moraces da nadjes drugi objekat preko kog ces preneti vrednosti. Ja nemam iskustva sa XElementom, pa ne mogu reci nista o tome, ali ako "ono" ne radi, a "ono drugo" radi, samo XElement moze biti problem.

Zasto ne napravis svoj objekat koji ce prenositi vrednosti ka klijentu, a da bude Serializable? Tako je najlakse.

...

Proverio sam. XElement nema odgovarajuce svojstvo. Napravi svoj objekat.


Nije problem napravio sam ja svoj objekat, tj nasao koji je Serializable, ali posto mi dosta komunikacije ide preko XElement htio sam i ovo da napravim da ide. Rijesio sam tako sto sam ga prenio kao neki objeakt, pa opet napravio XElement i nastavio da radim dalje sa XElementom.

Gore kao sto navedoh pise da ima "IXmlSerializable" zar to ne znaci da je on ipak Serializable ?

Hvala
Re: Workflow Persistence Serializable Problem 13.10.2008. u 14:03 · pre 219 meseci #8
Ne, druze, samo je IXmlSerializable, a ne ISerializable.
Potpis
Nije važno stići prvi. Važno je prvo da stigneš.
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme