HighTechTalks DotNet Forums  

WebPart Personalization Blob Deserialize Error

ASP.net Web Controls microsoft.public.dotnet.framework.aspnet.webcontrols


Discuss WebPart Personalization Blob Deserialize Error in the ASP.net Web Controls forum.



Reply
 
Thread Tools Search this Thread Display Modes
  #1  
Old   
=?Utf-8?B?VG9tIEpvaG4=?=
 
Posts: n/a

Default WebPart Personalization Blob Deserialize Error - 07-03-2007 , 08:54 AM






Hi

We're trying to maually deserialize the Personalization Blob for WebParts,
seemed pretty straight forward, however we get the error "The serialized data
is invalid." from the following code:

<code>
Using connection As New SqlConnection(My.Settings.Conn)
connection.Open()

Using Command As New SqlCommand("SELECT PageSettings FROM
aspnet_PersonalizationAllUsers", connection)

Using reader As SqlDataReader = Command.ExecuteReader()

While reader.Read()

Dim data As String =
Convert.ToBase64String(CType(reader(0), Byte()))
Dim formatter As New ObjectStateFormatter()
formatter.Deserialize(data)

End While

End Using

End Using

End Using
</code>

Anyone got any ideas on how you're supposed to crack this one?

Cheers

Tom


Reply With Quote
  #2  
Old   
Steven Cheng[MSFT]
 
Posts: n/a

Default RE: WebPart Personalization Blob Deserialize Error - 07-03-2007 , 11:08 PM






Hi Tom,

From your description, you're writing your custom code to load binary data
from ASP.NET webpart personalization database and deserialize againstit,
however,you're encountering some error on it , correct?

Based on my understanding, it is only when you developing a custom
personalization provider or customize the existing one will you need to
deal with the underlying binary data blob's load & store. So are you
developing your custom webpart personalization provider?

If you're customizing the default SQL personalization provider or also use
the same database, you can have a look at the built-in provider's code
implementation on how to retrieve the binary blob from database. Here is
the code I picked from reflector (of the SqlPersonalizationProvider class)

==================================
private byte[] LoadPersonalizationBlob(SqlConnection connection, string
path, string userName)
{
SqlCommand command;
if (userName != null)
{
command = new
SqlCommand("dbo.aspnet_PersonalizationPerUser_GetP ageSettings", connection);
}
else
{
command = new
SqlCommand("dbo.aspnet_PersonalizationAllUsers_Get PageSettings",
connection);
}
this.SetCommandTypeAndTimeout(command);
command.Parameters.Add(this.CreateParameter("@Appl icationName",
SqlDbType.NVarChar, this.ApplicationName));
command.Parameters.Add(this.CreateParameter("@Path ",
SqlDbType.NVarChar, path));
if (userName != null)
{
command.Parameters.Add(this.CreateParameter("@User Name",
SqlDbType.NVarChar, userName));
command.Parameters.Add(this.CreateParameter("@Curr entTimeUtc",
SqlDbType.DateTime, DateTime.UtcNow));
}
SqlDataReader reader = null;
try
{
reader = command.ExecuteReader(CommandBehavior.SingleRow);
if (reader.Read())
{
int length = (int) reader.GetBytes(0, (long) 0, null, 0, 0);
byte[] buffer = new byte[length];
reader.GetBytes(0, (long) 0, buffer, 0, length);
return buffer;
}
}
finally
{
if (reader != null)
{
reader.Close();
}
}
return null;
}
=========================================

Also, here are some other reference on building custom personalization
provider:

http://msdn2.microsoft.com/en-US/library/aa479037.aspx

http://msdn.microsoft.com/msdnmag/is...5/09/WebParts/

Hope this helps.

Sincerely,

Steven Cheng

Microsoft MSDN Online Support Lead



==================================================

Get notification to my posts through email? Please refer to
http://msdn.microsoft.com/subscripti...ult.aspx#notif
ications.



Note: The MSDN Managed Newsgroup support offering is for non-urgent issues
where an initial response from the community or a Microsoft Support
Engineer within 1 business day is acceptable. Please note that each follow
up response may take approximately 2 business days as the support
professional working with you may need further investigation to reach the
most efficient resolution. The offering is not appropriate for situations
that require urgent, real-time or phone-based interactions or complex
project analysis and dump analysis issues. Issues of this nature are best
handled working with a dedicated Microsoft Support Engineer by contacting
Microsoft Customer Support Services (CSS) at
http://msdn.microsoft.com/subscripti...t/default.aspx.

==================================================


This posting is provided "AS IS" with no warranties, and confers no rights.


Reply With Quote
  #3  
Old   
=?Utf-8?B?VG9tIEpvaG4=?=
 
Posts: n/a

Default RE: WebPart Personalization Blob Deserialize Error - 07-04-2007 , 04:28 AM



Steven

Thanks for you reply. I can see where you are going with this, however what
we're trying to do is way simpler. We're using the standard provider and
everything's working fine for the regular webpart customization scenario.

However, we are working on some utilities to provide the webmaster, one of
which needs to search the properties of the webparts on a page for certain
string values. So I want to desterilize the blob into the object graph and
iterate through the properties.

There is an article that suggests this has been achieved before, however it
does not tell the full story on how to do it:

http://dotnetjunkies.com/WebLog/teun...r_Storage.aspx

Hope this makes it a little clearer?

Thanks

Tom John
"Steven Cheng[MSFT]" wrote:

Quote:
Hi Tom,

From your description, you're writing your custom code to load binary data
from ASP.NET webpart personalization database and deserialize againstit,
however,you're encountering some error on it , correct?

Based on my understanding, it is only when you developing a custom
personalization provider or customize the existing one will you need to
deal with the underlying binary data blob's load & store. So are you
developing your custom webpart personalization provider?

If you're customizing the default SQL personalization provider or also use
the same database, you can have a look at the built-in provider's code
implementation on how to retrieve the binary blob from database. Here is
the code I picked from reflector (of the SqlPersonalizationProvider class)

==================================
private byte[] LoadPersonalizationBlob(SqlConnection connection, string
path, string userName)
{
SqlCommand command;
if (userName != null)
{
command = new
SqlCommand("dbo.aspnet_PersonalizationPerUser_GetP ageSettings", connection);
}
else
{
command = new
SqlCommand("dbo.aspnet_PersonalizationAllUsers_Get PageSettings",
connection);
}
this.SetCommandTypeAndTimeout(command);
command.Parameters.Add(this.CreateParameter("@Appl icationName",
SqlDbType.NVarChar, this.ApplicationName));
command.Parameters.Add(this.CreateParameter("@Path ",
SqlDbType.NVarChar, path));
if (userName != null)
{
command.Parameters.Add(this.CreateParameter("@User Name",
SqlDbType.NVarChar, userName));
command.Parameters.Add(this.CreateParameter("@Curr entTimeUtc",
SqlDbType.DateTime, DateTime.UtcNow));
}
SqlDataReader reader = null;
try
{
reader = command.ExecuteReader(CommandBehavior.SingleRow);
if (reader.Read())
{
int length = (int) reader.GetBytes(0, (long) 0, null, 0, 0);
byte[] buffer = new byte[length];
reader.GetBytes(0, (long) 0, buffer, 0, length);
return buffer;
}
}
finally
{
if (reader != null)
{
reader.Close();
}
}
return null;
}
=========================================

Also, here are some other reference on building custom personalization
provider:

http://msdn2.microsoft.com/en-US/library/aa479037.aspx

http://msdn.microsoft.com/msdnmag/is...5/09/WebParts/

Hope this helps.

Sincerely,

Steven Cheng

Microsoft MSDN Online Support Lead



==================================================

Get notification to my posts through email? Please refer to
http://msdn.microsoft.com/subscripti...ult.aspx#notif
ications.



Note: The MSDN Managed Newsgroup support offering is for non-urgent issues
where an initial response from the community or a Microsoft Support
Engineer within 1 business day is acceptable. Please note that each follow
up response may take approximately 2 business days as the support
professional working with you may need further investigation to reach the
most efficient resolution. The offering is not appropriate for situations
that require urgent, real-time or phone-based interactions or complex
project analysis and dump analysis issues. Issues of this nature are best
handled working with a dedicated Microsoft Support Engineer by contacting
Microsoft Customer Support Services (CSS) at
http://msdn.microsoft.com/subscripti...t/default.aspx.

==================================================


This posting is provided "AS IS" with no warranties, and confers no rights.



Reply With Quote
  #4  
Old   
Steven Cheng[MSFT]
 
Posts: n/a

Default RE: WebPart Personalization Blob Deserialize Error - 07-06-2007 , 06:05 AM



Thanks for your reply Tom,

Well, after read the article you provided, I think what you want to do is
accessing the serialized data(manually deserialized it) in a non-ASP.NET
context,correct?

For this scenario, I'm afraid I haven't quite got any definite reference on
manually inspect the webpart service's serialized binary data ourself.
Currently the data webpart manager's serialized dataformat hasn't bee well
documented and manually crack it out may cause some unexpected problem.
BTW, have you tried using the serializing code picked from the built-in
SqlPersonalizationProvider? It causes those predefined store precedures to
get the binary blob.

Sincerely,

Steven Cheng

Microsoft MSDN Online Support Lead


This posting is provided "AS IS" with no warranties, and confers no rights.


Reply With Quote
Reply




Thread Tools Search this Thread
Search this Thread:

Advanced Search
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

vB code is On
Smilies are On
[IMG] code is On
HTML code is Off



Powered by vBulletin Version 3.5.4
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.