What is the reason for this Error Message,
The type ‘Northwoods.GoWeb.GoView’ must be marked as Serializable or have a TypeConverter other than ReferenceConverter to be put in viewstate.
I am not using View State…, neither am in Trying to serialize it.
(but i am using this in a Web farm)
any Suggestions?
Is there a way to solve this. i cant proceed without solving this Error,
Thanks
DA
Maybe I don’t understand what this error really is. Could you describe more precisely what the error message is and where it comes from and what you are trying to do?
OK, <?:namespace prefix = o ns = “urn:schemas-microsoft-com:office:office” /><o:p></o:p>
I have an application deployed in a web farm. 2 machines share the same application, lets call them Mac1 and Mac2. This application is then is called using the cluster virtual name say http://MAC3/application/ViewPage.aspx. Now as you would expect, chances are that the URL goes to any of the machines MAC2 or MAC2, and for subsequent calls can go to anyone of the 2 machines <o:p></o:p>
This page has a GoView Control. I Generate some Nodes (GoIonicNode with an Image)based on the Data coming from a web service. <o:p></o:p>
1) Some Times it shows the View with the nodes (this is good)<o:p></o:p>
2) Some times it does not display anything (Just a normal image not found Place holder).<o:p></o:p>
3) Sometimes it throws a exception which reads…<o:p></o:p>
The type ‘Northwoods.GoWeb.GoView’ must be marked as Serializable or have a TypeConverter other than ReferenceConverter to be put in viewstate. <o:p></o:p>
4) Some times on a click, there is another view which is displayed. A View that i had visited couple of mouse clicks/selection before. <o:p></o:p>
5) Some times when I Double Click on a node it does not fire the Double click Event. <o:p></o:p>
So in all the View does not work as predicted (as of now but i am sure once you have understood this problem we will find a solution). <o:p></o:p>
If I run this application from a single machine, everything works as expected.<o:p></o:p>
So my question is what part of the View is sent through viewstate. What part is stored in the Session Object and what reference about the Rendered View is stored in the Application domain. <o:p></o:p>
Can we use the GoView control out of the box in a web farm Environment or do we have to do some modifications. <o:p></o:p>
I am Using IE and imageProperty is set to PNG format.<o:p></o:p>
Thanks<o:p></o:p>
this is my stack Trace
Stack Trace:
|
That is really weird. Northwoods.GoWeb.GoView does have the [Serializable] attribute and it implements ISerializable.
Did you set GoView.EnableViewState to true?
However, GoView should not be put into the viewstate. That would be terribly inefficient, sending all the GoView and GoDocument state in the HTML page, in addition to sending the PNG image. Instead the state is maintained in the Session state. This does cause the GoView and GoDocument et al to be serialized when the session state is saved, but I have always believed that that serialization is binary.
FYI, nothing is saved in the Application by the GoDiagram implementation.
No, I have not set GoView.EnableViewState to true, neither have i put it in ViewState. I guess in a web farm environment Session state is giving me a issue. I did find this in my Trace.axd output<?:namespace prefix = o ns = “urn:schemas-microsoft-com:office:office” /><o:p></o:p>
Session state |
|||||||||
Session Key |
Type |
Value |
|
|
|
|
|
|
|
Northwoods.GoWeb.GoViews |
System.Collections.Hashtable |
System.Collections.Hashtable |
|
|
|
|
|
|
|
What is the Role of GoWebimage.aspx, Trace.axd shows that it does take a Quesry String. 2 calls are made to this page, once with the Query string of GoView = GoViewName, and second Goview=GoOverviewName.
this page inherits from Northwoods.GoWeb.GoWebImage.
As the GoWebIntro.doc documentation file describes, there’s no portable way to embed an image into an HTML file, so we have to rely on an element which produces an additional request (actually, one per GoView that is in the Page).
How does GoWebImage.aspx produce an image? It gets the view from Session state and streams out the result of GoView.GetBitmap.
The problem is that you can’t have the web app be completely stateless, because the request is different from the whole Page request. I suppose you don’t need to use Session state if you don’t want to though–you could override GoView.FindSessionView and GoView.StoreSessionView and implement the serialization in your own manner, and reimplement GoWebImage.OnLoad in a compatible fashion. Doing this properly, though, will require session-like management of the objects, to avoid garbage generation.
For example, if you didn’t need to save any state for a GoView/GoDocument when the user clicked on a view, you might just generate an image that is stored on disk and referenced by the rendered element. But then you still need to delete those image files after a while. And you’ll note that the web app is still stateful–the state is just stored on disk as image files.
As a related topic, I might as well mention that there is a lot of behavior that GoView.RaisePostBackEvent can handle via query strings. GoWebImage can also handle those query strings, which is how a GoView.NoPost view can work to avoid having to do a postback and force the whole page to be regenerated/transmitted. Both GoOverview and GoPalette are implemented this way, which avoids a lot of postbacks and flickering.
Walter,
Thank you very much, I guess I have found a direction now.
have a great day…