Issue:
An issue exists whereby I cannot access my Self Hosted ADO.NET Data Services from my RIA applications.
My services are hosted separately to the web projects with the Rich Internet Applications (RIA)s.
I need to enable access from separate Silverlight (and Flash) client apps.
From Silverlight I get an exception (see below) when I try to make a call to the ADO.NET Data Service (which is Self Hosted separately). This I believe to due to Silverlight forbidding the cross domain call.
*System.InvalidOperationException: An error occurred while saving changes. See the inner exception for details. ---> System.Data.Services.Http.WebException: Internal error at 'HttpWebResponse.NormalizeResponseStatus'. at System.Data.Services.Http.HttpWebResponse.NormalizeResponseStatus(Int32& statusCode) at System.Data.Services.Http.HttpWebResponse..ctor(HttpWebRequest request, Int32 statusCode, String responseHeaders) at System.Data.Services.Http.HttpWebRequest.CreateResponse() at System.Data.Services.Http.HttpWebRequest.EndGetResponse(IAsyncResult asyncResult) at System.Data.Services.Client.QueryAsyncResult.AsyncEndGetResponse(IAsyncResult asyncResult) --- End of inner exception stack trace --- at System.Data.Services.Client.BaseAsyncResult.EndExecuteT at System.Data.Services.Client.QueryAsyncResult.EndExecuteTElement at System.Data.Services.Client.DataServiceQuery`1.EndExecute(IAsyncResult asyncResult) at Curo.Silverlight.MainPage.<>c__DisplayClass1.<.ctor>b__0(IAsyncResult ar) at System.Data.Services.Client.BaseAsyncResult.HandleCompleted() at System.Data.Services.Client.QueryAsyncResult.AsyncEndGetResponse(IAsyncResult asyncResult) at System.Data.Services.Http.HttpWebRequest.ReadyStateChanged() System.Data.Services.Http.WebException: Internal error at 'HttpWebResponse.NormalizeResponseStatus'. at System.Data.Services.Http.HttpWebResponse.NormalizeResponseStatus(Int32& statusCode) at System.Data.Services.Http.HttpWebResponse..ctor(HttpWebRequest request, Int32 statusCode, String responseHeaders) at System.Data.Services.Http.HttpWebRequest.CreateResponse() at System.Data.Services.Http.HttpWebRequest.EndGetResponse(IAsyncResult asyncResult) at System.Data.Services.Client.QueryAsyncResult.AsyncEndGetResponse(IAsyncResult asyncResult)*
Notes:
From what I have read, it appears that cross domain access is forbidden with regards to ADO.NET Data Services, which may result in my having to take another approach to the data access e.g. using a pure REST Framework..?
"The problem of Cross Domain ADO.NET Data Services is more complex than it sounds and it hasn't been solved. I've discussed it with Microsoft for a while now and the reason that it doesn't work has to do with its using a browser level transport and that transport doesn't allow cross-site scripting."
See: http://forums.silverlight.net/forums/p/70925/170703.aspx#170703
I understand that I need may need to expose a ClientAccessPolicy.xml file which will define the access rules whilst restricting cross site scripting.
It is also noteworthy to mention that the RIA applications will be running on the same LAN.
Questions:
Is there a viable means for me to access the services from my RIA clients considering they will be running behind the same firewall? If so how?
How do I expose ClientAccessPolicy.xml from a Self Hosted ADO.NET Data Service exactly?
What way would you recommend proceeding in order to allow external access to my services? - Different REST Framework? - Host Services within same web project at the cost of separation? - Any other advice...
Thanks.