Hi all,
By now , anyone running a SIlverlight application Astoria Silverlight Client library in Firefox 3.0 would have seen a weird error about charsets. This blog post will describe the error and how to work-around it .
Consider the following query :
DataServiceQuery<Customers> customerQuery = from cus in context.Customers where cus.ID =='ALFKI' select cus; AsyncCallback ac = iasyncResult =>{ DataServiceQuery<Customers> cusQuery = iasyncResult.AsyncState as DataServiceQuery<Customers>; QueryOperationResponse<Customer> response = cusQuery.EndExecute(iasyncResult); <-- Exception Thrown here } customerQuery.BeginExecute(ac,customerQuery);
When this code runs in Firefox 3.0 , the highlighted line throws the exception,
Error Message : Character set 'iso-8859-1' is not supported. Stack Trace : at System.Data.Services.Client.HttpProcessUtility.EncodingFromName(String name) at System.Data.Services.Client.HttpProcessUtility.MediaType.SelectEncoding() at System.Data.Services.Client.HttpProcessUtility.ReadContentType(String contentType, String& mime, Encoding& encoding) at System.Data.Services.Client.DataServiceContext.GetMaterializer(Type elementType, String contentType, Func`1 response, Func`4 create) at System.Data.Services.Client.DataServiceRequest.Materialize[TElement](DataServiceContext context, String contentType, Func`1 response) at System.Data.Services.Client.DataServiceRequest`1.Materialize(DataServiceContext context, String contentType, Func`1 response) at System.Data.Services.Client.DataServiceContext.EndExecute[TElement](IAsyncResult asyncResult)
Error Message : Character set 'iso-8859-1' is not supported. Stack Trace :
at System.Data.Services.Client.HttpProcessUtility.EncodingFromName(String name) at System.Data.Services.Client.HttpProcessUtility.MediaType.SelectEncoding() at System.Data.Services.Client.HttpProcessUtility.ReadContentType(String contentType, String& mime, Encoding& encoding) at System.Data.Services.Client.DataServiceContext.GetMaterializer(Type elementType, String contentType, Func`1 response, Func`4 create) at System.Data.Services.Client.DataServiceRequest.Materialize[TElement](DataServiceContext context, String contentType, Func`1 response) at System.Data.Services.Client.DataServiceRequest`1.Materialize(DataServiceContext context, String contentType, Func`1 response) at System.Data.Services.Client.DataServiceContext.EndExecute[TElement](IAsyncResult asyncResult)
When we recieve the ATOM response from the server , we need to read the stream of content in the charset present in the Accept-charset header. The server does not set the Accept-Charset header and replays what the client sent. The normal Accept-Charset header sent to the server from the SL client looks like this ..
Accept-Charset: UTF-8
Now , in FireFox 3.0 , the Accept-Charset header , even though we explicitly set it to be the above , whats sent to the server is ..
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7 And the Server responds back with the same charset and we try to read the content with this char-set.
Unfortunately , the charset ISO-8859-1, is not supported by the underlying Platform i.e SIlverlight. and hence we error out
Follow these instructions on changing your browser settings to work around the issue
Hope this helps.If you still face problems , open a thread on the Astoria Forums and we will try to help out.
PingBack from http://wordnew.acne-reveiw.info/?p=4031